<?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[bad_alloc in Ausnahmenspezifikationen]]></title><description><![CDATA[<p>Ich bin dabei, mir eine kleine C++-Bibliothek zu basteln, und nun stehe ich vor der Frage, ob ich meine Methoden mit Ausnahmespezifikationen versehen sollte oder nicht (eigentlich hatte ich das schon vor). Die meisten Bibliotheken, die ich bisher verwendet habe, machen keinen Gebrauch davon.</p>
<p>Insbesondere ist mir aufgefallen, daß beinahe jede Methode ein std::bad_alloc deklarieren müßte, weil man ja fast überall auf dynamische Speicherallokation angewiesen ist (und sei es auch nur indirekt, z. B. durch Manipulation von Containern, strings etc.). Irgendwie gibt man dadurch aber Implementationsdetails preis; für den Aufrufer ist ja nicht immer offensichtlich, ob und warum eine Methode auf dynamische Allokation angewiesen ist.</p>
<p>Gibt es dazu allgemein anerkannte Regeln? Für welche Methoden verwendet ihr Ausnahmespezifikationen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/146587/bad_alloc-in-ausnahmenspezifikationen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 17:37:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/146587.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 May 2006 08:02:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to bad_alloc in Ausnahmenspezifikationen on Tue, 09 May 2006 08:02:10 GMT]]></title><description><![CDATA[<p>Ich bin dabei, mir eine kleine C++-Bibliothek zu basteln, und nun stehe ich vor der Frage, ob ich meine Methoden mit Ausnahmespezifikationen versehen sollte oder nicht (eigentlich hatte ich das schon vor). Die meisten Bibliotheken, die ich bisher verwendet habe, machen keinen Gebrauch davon.</p>
<p>Insbesondere ist mir aufgefallen, daß beinahe jede Methode ein std::bad_alloc deklarieren müßte, weil man ja fast überall auf dynamische Speicherallokation angewiesen ist (und sei es auch nur indirekt, z. B. durch Manipulation von Containern, strings etc.). Irgendwie gibt man dadurch aber Implementationsdetails preis; für den Aufrufer ist ja nicht immer offensichtlich, ob und warum eine Methode auf dynamische Allokation angewiesen ist.</p>
<p>Gibt es dazu allgemein anerkannte Regeln? Für welche Methoden verwendet ihr Ausnahmespezifikationen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1053900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1053900</guid><dc:creator><![CDATA[srarnold]]></dc:creator><pubDate>Tue, 09 May 2006 08:02:10 GMT</pubDate></item><item><title><![CDATA[Reply to bad_alloc in Ausnahmenspezifikationen on Tue, 09 May 2006 08:06:51 GMT]]></title><description><![CDATA[<p>Also ich würde keine Exception-Spezifikationen verwenden - wenn du dagegen verstößt, sieht das idR übler aus als wenn du gar keine Spezifikation gestellt hast.</p>
<p>Übrigens: Wenn du verhindern willst, daß interne Geheimnisse (was ist eigentlich so geheim an der Tatsache, daß du was auf dem Heap vorhast?) nach außen kommen, kannst du die möglichen Exceptions auch selber abfangen und auswerten/entschärfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1053907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1053907</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 09 May 2006 08:06:51 GMT</pubDate></item><item><title><![CDATA[Reply to bad_alloc in Ausnahmenspezifikationen on Tue, 09 May 2006 08:16:21 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Also ich würde keine Exception-Spezifikationen verwenden - wenn du dagegen verstößt, sieht das idR übler aus als wenn du gar keine Spezifikation gestellt hast.</p>
</blockquote>
<p>Ich bin bemüht, jede Eventualität zu bedenken! <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="😉"
    /> Ich denke schon, daß eine Ausnahmespezifikation die Benutzung einer Bibliothek erleichtert, weil sich der Benutzer auf die Menge möglicher Ausnahmen verlassen kann.</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>was ist eigentlich so geheim an der Tatsache, daß du was auf dem Heap vorhast?</p>
</blockquote>
<p>Wenn ich eine Kleinigkeit an der Implementierung ändere, also z. B. einen lokalen std::string verwende, kann plötzlich die Deklaration von std::bad_alloc notwendig werden. Dann werden also Änderungen an der Schnittstelle nötig. Das schreckt mich ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1053913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1053913</guid><dc:creator><![CDATA[srarnold]]></dc:creator><pubDate>Tue, 09 May 2006 08:16:21 GMT</pubDate></item><item><title><![CDATA[Reply to bad_alloc in Ausnahmenspezifikationen on Tue, 09 May 2006 08:25:08 GMT]]></title><description><![CDATA[<p>Wie gesagt, wenn du verhindern willst, daß eine Exception nach außen gelangt, mußt du sie selber verarbeiten:</p>
<pre><code class="language-cpp">int worker() throw(user_exception)
{
  try
  {
    ...
  }
  catch(std::bad_alloc&amp; e)
  {
    throw user_exception(&quot;Zu wenig Speicher&quot;);
    //oder
    return -1;
  }
}
</code></pre>
<p>(und schon sieht der Anwender deiner Funktion keine bad_alloc-Fehler mehr)</p>
<p>PS: Du kannst auch std::exception in die Spezifikation aufnehmen, das umfasst <strong>alle</strong> Fehlersituationen, die in der Standardbibliothek vorkommen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1053917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1053917</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 09 May 2006 08:25:08 GMT</pubDate></item><item><title><![CDATA[Reply to bad_alloc in Ausnahmenspezifikationen on Tue, 09 May 2006 08:41:21 GMT]]></title><description><![CDATA[<p>Hallo,<br />
bevor du Exception-Spezifikationen benutzt, solltest du unbedingt die folgenden Sachen lesen:</p>
<p><a href="http://gotw.ca/publications/mill22.htm" rel="nofollow">http://gotw.ca/publications/mill22.htm</a><br />
<a href="http://cpptips.hyperformix.com/cpptips/except_spec_no" rel="nofollow">http://cpptips.hyperformix.com/cpptips/except_spec_no</a><br />
<a href="http://www.boost.org/more/lib_guide.htm#Exception-specification" rel="nofollow">http://www.boost.org/more/lib_guide.htm#Exception-specification</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1053933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1053933</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Tue, 09 May 2006 08:41:21 GMT</pubDate></item></channel></rss>