<?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[return oder throw]]></title><description><![CDATA[<p>Wenn ich jetzt z.B. ein paar Klassen habe und ich in irgendeiner Klasse z.B. ein Bild laden will, und das nicht klappt soll ich jetzt mit return ein false zurückgeben oder eine exception werden und die abfangen wo ich will?<br />
Also</p>
<pre><code class="language-cpp">bool foo() {
    return false;
}

// oder

void foo() {
    throw &quot;failed&quot;;
}
</code></pre>
<p>Und wie genau soll ich exceptions abfangen?<br />
Mit</p>
<pre><code class="language-cpp">catch (...);
// oder
catch (Art der exception);
</code></pre>
<p>Und wie kann ich die Art der exception die ich werfe bestimmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276821/return-oder-throw</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 06:07:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276821.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 Nov 2010 19:32:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to return oder throw on Mon, 08 Nov 2010 19:32:10 GMT]]></title><description><![CDATA[<p>Wenn ich jetzt z.B. ein paar Klassen habe und ich in irgendeiner Klasse z.B. ein Bild laden will, und das nicht klappt soll ich jetzt mit return ein false zurückgeben oder eine exception werden und die abfangen wo ich will?<br />
Also</p>
<pre><code class="language-cpp">bool foo() {
    return false;
}

// oder

void foo() {
    throw &quot;failed&quot;;
}
</code></pre>
<p>Und wie genau soll ich exceptions abfangen?<br />
Mit</p>
<pre><code class="language-cpp">catch (...);
// oder
catch (Art der exception);
</code></pre>
<p>Und wie kann ich die Art der exception die ich werfe bestimmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977497</guid><dc:creator><![CDATA[Ahnungslos^2]]></dc:creator><pubDate>Mon, 08 Nov 2010 19:32:10 GMT</pubDate></item><item><title><![CDATA[Reply to return oder throw on Mon, 08 Nov 2010 19:38:01 GMT]]></title><description><![CDATA[<p>Du könntest dir die Artikel dieses Forums anschauen:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?p=1977497#1977497" rel="nofollow">Exception-Handling</a><br />
<a href="http://magazin.c-plusplus.net/artikel/Modernes%20Exception-Handling%20Teil%201%20-%20Die%20Grundlagen" rel="nofollow">Modernes Exception-Handling Teil 1 - Die Grundlagen</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977501</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 08 Nov 2010 19:38:01 GMT</pubDate></item><item><title><![CDATA[Reply to return oder throw on Tue, 09 Nov 2010 16:27:40 GMT]]></title><description><![CDATA[<p>Ich hab mir jetzt mal den <a href="http://magazin.c-plusplus.net/artikel/Exception-Handling" rel="nofollow">ersten Artikes</a> durchgelesen, und es sind noch ein paar Fragen offen geblieben.<br />
1. Lohnt es sich, wenn man &quot;new&quot; benutzt, eine bad_alloc exception abzufangen, oder soll man das einfach sein lassen?<br />
2. Wenn ich jetzt mit einem filestream z.B. ein Bild laden möchte, werfe ich einmal selbst string-exceptions mit Fehlerbeschreibung, es kann aber auch sein, dass der filestream eine exception wirft. Wie genau soll ich diese dann behandeln?<br />
Mit zwei catch-Anweisungen etwa so:</p>
<pre><code class="language-cpp">try {
   //...
} catch (const std::string&amp; exception) {
   //...
} catch (...) {
   //...
}
</code></pre>
<p>Oder soll ich eine Klasse erstellen, die alle exceptions beinhaltet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977908</guid><dc:creator><![CDATA[Ahnungslos^2]]></dc:creator><pubDate>Tue, 09 Nov 2010 16:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to return oder throw on Tue, 09 Nov 2010 16:55:24 GMT]]></title><description><![CDATA[<p>Ahnungslos^2 schrieb:</p>
<blockquote>
<p>1. Lohnt es sich, wenn man &quot;new&quot; benutzt, eine bad_alloc exception abzufangen, oder soll man das einfach sein lassen?</p>
</blockquote>
<p>Meistens nicht. Oft ist es das beste die Anwendungsdaten zu sichern und zu beenden.</p>
<blockquote>
<p>2. Wenn ich jetzt mit einem filestream z.B. ein Bild laden möchte, werfe ich einmal selbst string-exceptions mit Fehlerbeschreibung, es kann aber auch sein, dass der filestream eine exception wirft. Wie genau soll ich diese dann behandeln?</p>
</blockquote>
<p>Wirf keine std::strings. Wirf immer etwas dass von std::exception ableitet (oder erstelle Meinetwegen eine eigene Exception Klasse -&gt; wichtig ist, dass alle Exception Typen in einer hierachie sind).</p>
<p>Dann stellt sich die Frage nämlich auch garnicht mehr. Du fängst einfach eine std::exception wenn es dir egal ist warum es fehlgeschlagen ist. Oft ist es das. Wenn es dir mal nicht egal ist - dann kannst du genauer spezifizieren welche Klassen zu erwartest:</p>
<pre><code class="language-cpp">catch(file_not_found const&amp; e) {
  cerr &lt;&lt; &quot;konnte Datei &quot;&lt;&lt;e.filename()&lt;&lt;&quot; nicht finden&quot;&lt;&lt;endl;
}
catch(file_corrupt const&amp; e) {
  cerr &lt;&lt; &quot;datei &quot;&lt;&lt;e.filename()&lt;&lt;&quot; war vorhanden, ich konnte sie aber nicht parsen. Message: &quot;&lt;&lt;e.what()&lt;&lt;endl;
}
catch(exception const&amp; e) {
  cerr &lt;&lt; &quot;folgender Fehler ist augetreten: &quot;&lt;&lt;e.what()&lt;&lt;endl;
}
catch(...) {
  cerr &lt;&lt; &quot;etwas verrücktes ist schief gegangen, gnade uns gott&quot;&lt;&lt;endl;
}
</code></pre>
<p>Der Vorteil ist, du kannst immer so genau auf Fehler reagieren wie du willst. Wenn du zwischen einzelnen fehlern trennen willst (zB könnte es ja sein dass du auf ein file_not_found reagieren kannst indem du es wiederherstellst oder dergleichen) dann kannst du das jederzeit tun. Du musst es aber nie. catch(exception const&amp;) fängt dir immer alles...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977945</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 09 Nov 2010 16:55:24 GMT</pubDate></item><item><title><![CDATA[Reply to return oder throw on Tue, 09 Nov 2010 18:37:34 GMT]]></title><description><![CDATA[<p>Und wenn ich jetzt z.B. einen offenen filestream habe, und dann eine exception werfe, wird der filestream automatisch geschlossen oder muss ich das selber machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1978007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1978007</guid><dc:creator><![CDATA[Ahnungslos^2]]></dc:creator><pubDate>Tue, 09 Nov 2010 18:37:34 GMT</pubDate></item><item><title><![CDATA[Reply to return oder throw on Tue, 09 Nov 2010 19:23:05 GMT]]></title><description><![CDATA[<p>Wenn du einen C++-Stream benutzt, der RAII kann, schliesst er sich. Bei C-Funktionen oder schlechtem C++-Code musst du das manuell tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1978052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1978052</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 09 Nov 2010 19:23:05 GMT</pubDate></item><item><title><![CDATA[Reply to return oder throw on Tue, 09 Nov 2010 19:31:07 GMT]]></title><description><![CDATA[<p>Ich benutze den ganz normalen std::fstream. In der Referenz habe ich aber nichts darüber gefunden, was der Destruktor macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1978058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1978058</guid><dc:creator><![CDATA[Ahnungslos^2]]></dc:creator><pubDate>Tue, 09 Nov 2010 19:31:07 GMT</pubDate></item></channel></rss>