<?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[Exceptions und der Stack]]></title><description><![CDATA[<p>Wäre dieses Vorgehen gültig?</p>
<pre><code class="language-cpp">void foo()
{
  std::string s = &quot;Fehler!&quot;;
  throw std::runtime_error(s.c_str());
}

int main()
{
  try
  {
    foo();
  }
  catch (std::runtime_error const&amp; e)
  {
    std::cout &lt;&lt; e.what();
  }
}
</code></pre>
<p>Bei mir funktioniert es zwar, aber ich bin mir nicht ganz sicher ob man das so machen darf. Denn der std::string wird ja eigentlich zerstört nachdem die Exception geworfen wurde. Kopiert std::runtime_error den String?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293495/exceptions-und-der-stack</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 07:24:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293495.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Oct 2011 12:12:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Exceptions und der Stack on Tue, 04 Oct 2011 12:12:51 GMT]]></title><description><![CDATA[<p>Wäre dieses Vorgehen gültig?</p>
<pre><code class="language-cpp">void foo()
{
  std::string s = &quot;Fehler!&quot;;
  throw std::runtime_error(s.c_str());
}

int main()
{
  try
  {
    foo();
  }
  catch (std::runtime_error const&amp; e)
  {
    std::cout &lt;&lt; e.what();
  }
}
</code></pre>
<p>Bei mir funktioniert es zwar, aber ich bin mir nicht ganz sicher ob man das so machen darf. Denn der std::string wird ja eigentlich zerstört nachdem die Exception geworfen wurde. Kopiert std::runtime_error den String?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2127056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2127056</guid><dc:creator><![CDATA[exceptor]]></dc:creator><pubDate>Tue, 04 Oct 2011 12:12:51 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions und der Stack on Tue, 04 Oct 2011 12:23:33 GMT]]></title><description><![CDATA[<p>Der Konstruktor von runtime_error hat als Argument eine const-Referenz auf einen string. Damit dürftest du dir die Frage selbst beantworten können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2127058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2127058</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 04 Oct 2011 12:23:33 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions und der Stack on Tue, 04 Oct 2011 12:24:08 GMT]]></title><description><![CDATA[<p>Ja, das wird im Exception-Objekt gespeichert. Sollte runtime_error nicht sowieso einen string als Argument nehmen? Du gehst hier irgendwie über drei Ecken, obwohl's auch direkt ginge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2127059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2127059</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 04 Oct 2011 12:24:08 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions und der Stack on Tue, 04 Oct 2011 12:38:54 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Der Konstruktor von runtime_error hat als Argument eine const-Referenz auf einen string. Damit dürftest du dir die Frage selbst beantworten können.</p>
</blockquote>
<p>Die Tatsache, dass der Parameter ein const ist, sagt etwas über interne Kopien aus?</p>
<p>Wieso das? Verstehe ich nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2127066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2127066</guid><dc:creator><![CDATA[Langsam?]]></dc:creator><pubDate>Tue, 04 Oct 2011 12:38:54 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions und der Stack on Tue, 04 Oct 2011 12:39:01 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Der Konstruktor von runtime_error hat als Argument eine const-Referenz auf einen string.</p>
</blockquote>
<p>Autsch, das beantwortet irgendwie viel. Danke euch. <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/2127067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2127067</guid><dc:creator><![CDATA[exceptor]]></dc:creator><pubDate>Tue, 04 Oct 2011 12:39:01 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions und der Stack on Tue, 04 Oct 2011 12:42:45 GMT]]></title><description><![CDATA[<p>Langsam? schrieb:</p>
<blockquote>
<p>Bashar schrieb:</p>
<blockquote>
<p>Der Konstruktor von runtime_error hat als Argument eine const-Referenz auf einen string. Damit dürftest du dir die Frage selbst beantworten können.</p>
</blockquote>
<p>Die Tatsache, dass der Parameter ein const ist, sagt etwas über interne Kopien aus?</p>
<p>Wieso das? Verstehe ich nicht...</p>
</blockquote>
<p>Hier müßte es klappen, weil der konstante String ja im Speicher liegt, aber generell ist das doch keine Antwort auf die Frage, ob er kopiert, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2127070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2127070</guid><dc:creator><![CDATA[Langsam?]]></dc:creator><pubDate>Tue, 04 Oct 2011 12:42:45 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions und der Stack on Tue, 04 Oct 2011 12:48:13 GMT]]></title><description><![CDATA[<p>Langsam? schrieb:</p>
<blockquote>
<p>Bashar schrieb:</p>
<blockquote>
<p>Der Konstruktor von runtime_error hat als Argument eine const-Referenz auf einen string. Damit dürftest du dir die Frage selbst beantworten können.</p>
</blockquote>
<p>Die Tatsache, dass der Parameter ein const ist, sagt etwas über interne Kopien aus?</p>
</blockquote>
<p>Nein, aber die Tatsache, dass es ein string ist. Aus dem char-Zeiger, den s.c_str() zurückgibt, konstruiert sich ein temporärer string, der per const-Referenz an den Konstruktor von runtime_error übergeben wird. Danach wird der char-Zeiger nicht mehr benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2127074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2127074</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 04 Oct 2011 12:48:13 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions und der Stack on Tue, 04 Oct 2011 13:10:09 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> &lt;- blind <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2127082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2127082</guid><dc:creator><![CDATA[Langsam?]]></dc:creator><pubDate>Tue, 04 Oct 2011 13:10:09 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions und der Stack on Tue, 04 Oct 2011 14:49:47 GMT]]></title><description><![CDATA[<p>Selbst wenn er einen string übergeben würde, darf man davon ausgehen, dass die Exception sich eine interne Kopie sichert. Ganz einfach weil es möglich sein sollte, std::runtime_error's erst in der main zu fangen. Wenn ich z.B. einen aus meinem Framework werfe, müsste ich bei Referenzhaltung den übergebenen String unbedingt als statische globale oder statische funktionslokale Variable ablegen, weil alles andere beim stack unwinding irgendwann abgeräumt würde. Die Fehlermeldung dann erst beim Entstehen des Fehlers zusammenzubasteln wäre dann ein ziemlicher Krampf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2127118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2127118</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 04 Oct 2011 14:49:47 GMT</pubDate></item></channel></rss>