<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Problem mit Exceptions im Konstruktor]]></title><description><![CDATA[<p>Hallo,</p>
<p>der Konstruktor einer meiner Klassen kann eine Exception werfen.<br />
Jetzt habe ich aber ein Problem wenn ich diese Exception abfangen will.<br />
Dazu folgendes Beispiel:</p>
<pre><code class="language-cpp">try
{
   Brief b(&quot;.\\brief.xml&quot;);
}
catch (string&amp; e)
{
    cout &lt;&lt; e;
}

b.tuWas();
</code></pre>
<p>Das funktioniert natürlich nicht, weil er bei tuWas() b überhaupt nicht kennt.<br />
Aber wie könnte ich das dann lösen?<br />
tuWas mit in den catch-Block? Dann müsste da aber noch mehr rein und ich wüsste irgendwann nicht mehr, wer da eine Exception geworfen hat.<br />
b vorher schon mit Brief b; deklarieren? Dann würde ja zwei mal ein Konstruktor von Brief aufgerufen werden, was ja auch unbedingt nicht sein muss.</p>
<p>Wie löst ihr das?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/213951/problem-mit-exceptions-im-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 20:51:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/213951.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 23 May 2008 20:00:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Exceptions im Konstruktor on Fri, 23 May 2008 20:00:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>der Konstruktor einer meiner Klassen kann eine Exception werfen.<br />
Jetzt habe ich aber ein Problem wenn ich diese Exception abfangen will.<br />
Dazu folgendes Beispiel:</p>
<pre><code class="language-cpp">try
{
   Brief b(&quot;.\\brief.xml&quot;);
}
catch (string&amp; e)
{
    cout &lt;&lt; e;
}

b.tuWas();
</code></pre>
<p>Das funktioniert natürlich nicht, weil er bei tuWas() b überhaupt nicht kennt.<br />
Aber wie könnte ich das dann lösen?<br />
tuWas mit in den catch-Block? Dann müsste da aber noch mehr rein und ich wüsste irgendwann nicht mehr, wer da eine Exception geworfen hat.<br />
b vorher schon mit Brief b; deklarieren? Dann würde ja zwei mal ein Konstruktor von Brief aufgerufen werden, was ja auch unbedingt nicht sein muss.</p>
<p>Wie löst ihr das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515372</guid><dc:creator><![CDATA[martl]]></dc:creator><pubDate>Fri, 23 May 2008 20:00:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions im Konstruktor on Fri, 23 May 2008 20:32:45 GMT]]></title><description><![CDATA[<p>Wann soll denn tuWas() ausgeführt werden? Natürlich nur wenns Brief-Instanzierung erfolgreich war.</p>
<pre><code class="language-cpp">try
{
   Brief b(&quot;.\\brief.xml&quot;);
   b.tuWas();
}
catch (string&amp; e)
{
    cout &lt;&lt; e;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1515401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515401</guid><dc:creator><![CDATA[HansiHinterseher]]></dc:creator><pubDate>Fri, 23 May 2008 20:32:45 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions im Konstruktor on Sat, 24 May 2008 08:55:21 GMT]]></title><description><![CDATA[<p>Wenn ich das aber so mache wie dues ovrgeschlagen hast, dann müsste ich mein<br />
ganzes Programm in den try Block schreiben (weil das ganze Programm mit diesem<br />
Brief-Objekt interagiert) und dann fange ich vielleicht auch Exceptions die nicht<br />
vom Konstruktor geworfen werden, was ja auch nicht unbedingt so toll ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515571</guid><dc:creator><![CDATA[martl]]></dc:creator><pubDate>Sat, 24 May 2008 08:55:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions im Konstruktor on Sat, 24 May 2008 09:10:36 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>pack es doch auf den Heap.</p>
<pre><code class="language-cpp">Brief* b = NULL;
try {
    b = new Brief(&quot;.\\brief.xml&quot;);
} catch (string&amp; e) {
    cout &lt;&lt; e;
    delete b;
}

b-&gt;tuWas();
// ...
delete b;
</code></pre>
<p>musst nur mit der zerstörung deines Objektes aufpassen (oder Smart-Pointer verwenden)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515579</guid><dc:creator><![CDATA[Xantus]]></dc:creator><pubDate>Sat, 24 May 2008 09:10:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions im Konstruktor on Sat, 24 May 2008 09:19:33 GMT]]></title><description><![CDATA[<p>Es gibt kein b, wenn der Konstruktor geworfen hat. Jeglicher Zugriff auf b wäre undefiniert. Die Variante über den Heap ermöglicht auch nur, den Zeiger danach anzusprechen. Der zeigt aber, wenn der Konstruktor geworfen hat, ins Nirvana.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515584</guid><dc:creator><![CDATA[LordJaxom_nl]]></dc:creator><pubDate>Sat, 24 May 2008 09:19:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions im Konstruktor on Sat, 24 May 2008 09:26:06 GMT]]></title><description><![CDATA[<p>martl schrieb:</p>
<blockquote>
<p>Wenn ich das aber so mache wie dues ovrgeschlagen hast, dann müsste ich mein<br />
ganzes Programm in den try Block schreiben (weil das ganze Programm mit diesem<br />
Brief-Objekt interagiert) und dann fange ich vielleicht auch Exceptions die nicht<br />
vom Konstruktor geworfen werden, was ja auch nicht unbedingt so toll ist.</p>
</blockquote>
<p>Das ist auch so üblich, schließlich soll der Anwender eine schöne Fehlermeldung sehen wenn was schiefgeht und keine Windows-Fehlermeldung weil eine ungefangene Excpetion das Programm terminiert hat.</p>
<p>Und du hast dein Problem auch nur weil du als Exception-Objekte std::string benutzt würdest du verschiedene Exceptions von std::exception und Unterklassen ableiten und dir so eine Exceptionhierarchie aufbauen wäre das alles gar kein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515588</guid><dc:creator><![CDATA[Elite-Progger]]></dc:creator><pubDate>Sat, 24 May 2008 09:26:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions im Konstruktor on Sat, 24 May 2008 09:42:44 GMT]]></title><description><![CDATA[<p>Generell gilt, dass man Exceptions nur dort fangen soll, wo man sie auch reparieren kann. Wenn man sie nicht reparieren kann, sollen sie ruhig komplett durchrasseln, bis sie in der main gecatcht werden damit der nutzer vor der programmterminierung eine schöne Fehlermeldung sieht(wie Elite-Progger bereits sagte).</p>
<p>Ausnahme sind hier die ganz bösen exceptions vom Betriebssystem wie out of memory, division durch null, etc.pp die sollten am besten nicht gefangen werden, weil die debugger dann schön viele Informationen liefern können(ausnahme ist im release mode, wenn ein backtrace tool im programm integriert ist).</p>
<p>Und untersteh dich, irgendwo einen catch(...) block zu verwenden, die sind böse <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515596</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 24 May 2008 09:42:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions im Konstruktor on Sat, 24 May 2008 09:51:14 GMT]]></title><description><![CDATA[<p>LordJaxom_nl schrieb:</p>
<blockquote>
<p>Die Variante über den Heap ermöglicht auch nur, den Zeiger danach anzusprechen. Der zeigt aber, wenn der Konstruktor geworfen hat, ins Nirvana.</p>
</blockquote>
<p>Genaugenommen ist es immer noch ein Nullpointer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515603</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 24 May 2008 09:51:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions im Konstruktor on Sat, 24 May 2008 17:31:36 GMT]]></title><description><![CDATA[<p>martl schrieb:</p>
<blockquote>
<p>Wenn ich das aber so mache wie dues ovrgeschlagen hast, dann müsste ich mein<br />
ganzes Programm in den try Block schreiben (weil das ganze Programm mit diesem<br />
Brief-Objekt interagiert) und dann fange ich vielleicht auch Exceptions die nicht<br />
vom Konstruktor geworfen werden, was ja auch nicht unbedingt so toll ist.</p>
</blockquote>
<p>dann halt so:</p>
<pre><code class="language-cpp">try 
{ 
   Brief b(&quot;.\\brief.xml&quot;); 
   try 
   { 
      // rest vom programm
      b.tuWas(); 
   }
   catch (...) // bzw. was halt geworfen werden kann
   {
      // exception aus &quot;rest vom programm&quot;
   }
} 
catch (string&amp; e) 
{ 
    cout &lt;&lt; e; 
}
</code></pre>
<p>was auf jeden fall nicht geht ist ein objekt welches du nicht konstruiert hast zu verwenden. d.h. wenn 'Brief b(&quot;.\\brief.xml&quot;);' eine exception wirft kannst du b logischerweise nicht verwenden, da es b in dem fall nicht gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515911</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 24 May 2008 17:31:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions im Konstruktor on Sat, 24 May 2008 17:40:40 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Und untersteh dich, irgendwo einen catch(...) block zu verwenden, die sind böse <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Wie meinst du das jetzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515918</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 24 May 2008 17:40:40 GMT</pubDate></item></channel></rss>