<?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[richtige fehlerbehandlung]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>ich habe eine Klasse die Operationen an der Windows-Registry erlaubt.<br />
Das momentane Problem ist, eine geeignete Fehlerbehandlung zu implementieren.</p>
<p>So wie ich das sehe habe ich folgende Möglichkeiten:</p>
<ol>
<li>Exceptions</li>
</ol>
<p>Wenn ein Fehler auftritt, werfe ich eine Exception vom Typ std::runtime_error.<br />
Finde ich persönlich aber nicht so gut, kann es aber nicht begründen, da ich mich damit noch nicht wirklich gut auskenne. Meine Klasse arbeitet nach dem RAII-Prinzip, wird, wenn die Exception geworfen wird dann mein Objekt zerstört und der Destruktor aufgerufen, oder habe ich dann ein Ressourcenleck?</p>
<ol start="2">
<li>Fehlermeldung durch Rückgabewerte</li>
</ol>
<p>Ich gebe einen bestimmten Fehlercode zurück wenn ein Fehler auftritt. Nur haben meine Funktionen teilweise unterschiedliche Rückgabetypen, finde ich umständlich und nicht gut zu benutzen.</p>
<ol start="3">
<li>Fehlerfunktion</li>
</ol>
<p>Das finde ich momentan am besten. Ich implementiere eine Memberfunktion error() die, ähnlich wie bei den Streams, einfach nur true/false zurückgibt, also ob ein Fehler aufgetreten ist oder nicht.</p>
<p>Könnt Ihr mir Tipps geben wie man das am besten lösen könnte / welche möglichen Lösungen ich noch nicht kenne?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/312545/richtige-fehlerbehandlung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 18:46:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312545.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 Jan 2013 15:03:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to richtige fehlerbehandlung on Mon, 07 Jan 2013 15:03:54 GMT]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>ich habe eine Klasse die Operationen an der Windows-Registry erlaubt.<br />
Das momentane Problem ist, eine geeignete Fehlerbehandlung zu implementieren.</p>
<p>So wie ich das sehe habe ich folgende Möglichkeiten:</p>
<ol>
<li>Exceptions</li>
</ol>
<p>Wenn ein Fehler auftritt, werfe ich eine Exception vom Typ std::runtime_error.<br />
Finde ich persönlich aber nicht so gut, kann es aber nicht begründen, da ich mich damit noch nicht wirklich gut auskenne. Meine Klasse arbeitet nach dem RAII-Prinzip, wird, wenn die Exception geworfen wird dann mein Objekt zerstört und der Destruktor aufgerufen, oder habe ich dann ein Ressourcenleck?</p>
<ol start="2">
<li>Fehlermeldung durch Rückgabewerte</li>
</ol>
<p>Ich gebe einen bestimmten Fehlercode zurück wenn ein Fehler auftritt. Nur haben meine Funktionen teilweise unterschiedliche Rückgabetypen, finde ich umständlich und nicht gut zu benutzen.</p>
<ol start="3">
<li>Fehlerfunktion</li>
</ol>
<p>Das finde ich momentan am besten. Ich implementiere eine Memberfunktion error() die, ähnlich wie bei den Streams, einfach nur true/false zurückgibt, also ob ein Fehler aufgetreten ist oder nicht.</p>
<p>Könnt Ihr mir Tipps geben wie man das am besten lösen könnte / welche möglichen Lösungen ich noch nicht kenne?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287264</guid><dc:creator><![CDATA[exception??]]></dc:creator><pubDate>Mon, 07 Jan 2013 15:03:54 GMT</pubDate></item><item><title><![CDATA[Reply to richtige fehlerbehandlung on Mon, 07 Jan 2013 15:31:29 GMT]]></title><description><![CDATA[<p>Gib eine Referenz auf einen std::error_code mit, oder wirf eine std::system_error Exception. (Vielleicht kann man das einstellen? Vielleicht gibst du einen Pointer auf einen std::error_code mit?)<br />
Siehe auch <a href="http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-5.html" rel="nofollow">http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-5.html</a><br />
Ich muss sagen, in letzter Zeit immer mehr Abstand von Exceptions genommen zu haben. Eigentlich werfe ich nur noch genau dann Exceptions, wenn ich den Fehler nicht behandeln will/kann, sondern nur anzeigen möchte.</p>
<p>Ein Ressourcenleck bekommst du allerdings nicht dadurch. Wenn eine Exception geworfen wird, werden alle vorher konstruierten Objekte ordnungsgemäß abgeräumt (ihre Destruktoren werden aufgerufen), bis die Exception wieder gefangen wird. Das ist auch der Grund dafür warum man keine Exception aus Destruktoren werfen soll - mit zwei gleichzeitig fliegenden Exceptions kann C++ (noch?) nichts anfangen.</p>
<p>Die Fehlerfunktion (dann bitte auch mir std::error_code) wäre natürlich auch möglich. Prinzipiell bin ich da eher abgeneigt, aber ein wirklich gutes, handfestes Argument dagegen habe ich nicht. Vergessen kann man Fehlerbehandlung immer - auch mit Exceptions - und Multithreading ist bei deiner Klasse wohl eh nicht vorgesehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287269</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 07 Jan 2013 15:31:29 GMT</pubDate></item><item><title><![CDATA[Reply to richtige fehlerbehandlung on Mon, 07 Jan 2013 15:57:49 GMT]]></title><description><![CDATA[<p>Ok vielen Dank, das hat mir schon sehr weitergeholfen.</p>
<p>Noch eine etwas (dumme) Frage:</p>
<p>Ich habe jetzt einen privaten Member</p>
<pre><code>std::system_error _ec
</code></pre>
<p>und diese Funktion:</p>
<pre><code>std::string&amp; Registry::error()
{
	return _ec.message();
}
</code></pre>
<p>Ich gebe ja eine Referenz auf einen <code>std::string</code> zurück, ist das jetzt undefiniertes Verhalten? Ich denke schon, oder? Immerhin erstelle ich mit <code>_ec.message()</code> eine lokale Variable die daraufhin wieder zerstört wird? Bin nur etwas verwirrt, weil das Objekt <code>_ec</code> ja weiterhin vorhanden ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287284</guid><dc:creator><![CDATA[exception??]]></dc:creator><pubDate>Mon, 07 Jan 2013 15:57:49 GMT</pubDate></item><item><title><![CDATA[Reply to richtige fehlerbehandlung on Mon, 07 Jan 2013 16:08:04 GMT]]></title><description><![CDATA[<p>Ja, das ist UB, wozu überhaupt eine Referenz? Der String wird da eh gemoved. Abgesehen davon ist es doch mehr als ungeschickt, da einen String zurückzugeben. Warum nicht std::error_code? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287288</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 07 Jan 2013 16:08:04 GMT</pubDate></item><item><title><![CDATA[Reply to richtige fehlerbehandlung on Mon, 07 Jan 2013 16:15:55 GMT]]></title><description><![CDATA[<p>Das war nur ein Beispiel, hatte mich das gerade irgendwie gefragt <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="😉"
    /><br />
Ich denke ich werde das jetzt so machen wie bei dem Link den du mir geschickt hast <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287290</guid><dc:creator><![CDATA[exception??]]></dc:creator><pubDate>Mon, 07 Jan 2013 16:15:55 GMT</pubDate></item></channel></rss>