<?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 Klassen mit dyn. Speicherreservierung]]></title><description><![CDATA[<p>Hallo!</p>
<p>Angenommen ich habe eine Klasse, die dyn. Speicher reserviert:</p>
<pre><code class="language-cpp">class Foo
{
private:
    int * m_ptr;
public:
    Foo()
      : m_ptr(0)
    {
        this-&gt;m_ptr = new int[10];
    }

    ~Foo()
    {
        if (this-&gt;m_ptr != 0)
        {
            delete [] this-&gt;m_ptr;
            this-&gt;m_ptr = 0;
        }
    }
};
</code></pre>
<p>Wie ist das jetzt wenn ich eine Instanz dieser Klasse erzeuge und dann eine Ausnahme werfe? Wird der Destruktor von <code>Foo</code> aufgerufen und der Speicher freigegeben oder erhalte ich ein memory leak?</p>
<pre><code class="language-cpp">void Test()
{
    Foo f;
    // etwas Code
    throw std::exception();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/245375/exceptions-und-klassen-mit-dyn-speicherreservierung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 20:17:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245375.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Jul 2009 13:57:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Exceptions und Klassen mit dyn. Speicherreservierung on Mon, 13 Jul 2009 13:57:55 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Angenommen ich habe eine Klasse, die dyn. Speicher reserviert:</p>
<pre><code class="language-cpp">class Foo
{
private:
    int * m_ptr;
public:
    Foo()
      : m_ptr(0)
    {
        this-&gt;m_ptr = new int[10];
    }

    ~Foo()
    {
        if (this-&gt;m_ptr != 0)
        {
            delete [] this-&gt;m_ptr;
            this-&gt;m_ptr = 0;
        }
    }
};
</code></pre>
<p>Wie ist das jetzt wenn ich eine Instanz dieser Klasse erzeuge und dann eine Ausnahme werfe? Wird der Destruktor von <code>Foo</code> aufgerufen und der Speicher freigegeben oder erhalte ich ein memory leak?</p>
<pre><code class="language-cpp">void Test()
{
    Foo f;
    // etwas Code
    throw std::exception();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1742145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742145</guid><dc:creator><![CDATA[Klaas123]]></dc:creator><pubDate>Mon, 13 Jul 2009 13:57:55 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions und Klassen mit dyn. Speicherreservierung on Mon, 13 Jul 2009 14:28:46 GMT]]></title><description><![CDATA[<p>Ja, Variablen mit automatischer Speicherklasse ( <code>auto</code> , oft wird auch der Begriff &quot;Stack&quot; verwendet) werden zerstört, sobald du den Gültigkeitsbereich verlässt, also bei der schliessenden geschweiften Klammer - egal, ob durch <code>throw</code> oder <code>return</code> .</p>
<p>Das Nullsetzen des Zeigers ist bei dir übrigens sowohl im Konstruktor als auch Destruktor unnötig. Die Prüfung auf Null auch, <code>delete</code> und <code>delete[]</code> dürfen auf Nullzeiger angewandt werden, in diesem Fall passiert halt nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742162</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 13 Jul 2009 14:28:46 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions und Klassen mit dyn. Speicherreservierung on Mon, 13 Jul 2009 14:34:54 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Ja, Variablen mit automatischer Speicherklasse</p>
</blockquote>
<p>Wäre diese Klasse <code>Foo</code> also auch eine Klasse &quot;mit automatischem Speicher&quot;?</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Das Nullsetzen des Zeigers ist bei dir übrigens sowohl im Konstruktor als auch Destruktor unnötig. Die Prüfung auf Null auch, <code>delete</code> und <code>delete[]</code> dürfen auf Nullzeiger angewandt werden, in diesem Fall passiert halt nichts.</p>
</blockquote>
<p>Das stammt noch aus alten VC6 Zeiten. Dort gab es ab und Probleme, wenn ich einen Zeiger auf 0 nicht NULL gestetet habe (obwohl NULL als 0 definiert ist). Ist das verahlten von delete auf Nullzeiger nicht undefiniert, oder irre ich mich hier?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742170</guid><dc:creator><![CDATA[Klaas123]]></dc:creator><pubDate>Mon, 13 Jul 2009 14:34:54 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions und Klassen mit dyn. Speicherreservierung on Mon, 13 Jul 2009 14:38:28 GMT]]></title><description><![CDATA[<p>Klaas123 schrieb:</p>
<blockquote>
<p>Wäre diese Klasse <code>Foo</code> also auch eine Klasse &quot;mit automatischem Speicher&quot;?</p>
</blockquote>
<p>Die Klasse selbst nicht, aber die lokale Variable <code>f</code> in deinem Beispiel.</p>
<p>Klaas123 schrieb:</p>
<blockquote>
<p>Das stammt noch aus alten VC6 Zeiten. Dort gab es ab und Probleme, wenn ich einen Zeiger auf 0 nicht NULL gestetet habe (obwohl NULL als 0 definiert ist).</p>
</blockquote>
<p>Arbeitest du denn immer noch mit VC6? Falls ja, steige so schnell wie möglich um. Falls nein, gewöhn dir solche Dinge ab... <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>
<p>Klaas123 schrieb:</p>
<blockquote>
<p>Ist das verahlten von delete auf Nullzeiger nicht undefiniert, oder irre ich mich hier?</p>
</blockquote>
<p>Ja, du irrst dich, <code>delete</code> und <code>delete[]</code> haben keine Probleme mit Nullzeigern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742173</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 13 Jul 2009 14:38:28 GMT</pubDate></item><item><title><![CDATA[Reply to Exceptions und Klassen mit dyn. Speicherreservierung on Mon, 13 Jul 2009 14:49:28 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Arbeitest du denn immer noch mit VC6? Falls ja, steige so schnell wie möglich um. Falls nein, gewöhn dir solche Dinge ab... <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>Nein, damit arbeite ich zum Glück nicht mehr. Ich werde mich dann wohl bemühen, es mir abzugewöhnen.</p>
<p>Besten Dank auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1742178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1742178</guid><dc:creator><![CDATA[Klaas123]]></dc:creator><pubDate>Mon, 13 Jul 2009 14:49:28 GMT</pubDate></item></channel></rss>