<?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[Destruktor Aufrufe]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>ich habe eine kurze Frage zu den automatischen Destruktoraufrufen und zwar betrachte man folgenden Code</p>
<pre><code class="language-cpp">class A
{
    ~A() {};
};

class B: public A{

    ~B() {};

};

A* b = new B();

delete b;
</code></pre>
<p>Hier wird, wenn ich das richtig verstanden habe, bei &quot;delete b&quot; direkt der Destruktor von Klasse A aufgerufen, da der Destruktor in A nicht virtual ist oder?</p>
<p>Angenommen dieser ist virtual, also der Code sehe folgendermaßen aus</p>
<pre><code class="language-cpp">class A
{
    virtual ~A() {};
};

class B: public A{

    ~B() {};

};

A* b = new B();

delete b;
</code></pre>
<p>Dann wird der Destruktor von B aufgerufen oder?<br />
Ruft dieser anschließend auch automatisch den Destruktor von A auf und würden, falls man meine eine ganze Vererbungshierarchie betrachtet, alle Destruktoren bis zur Spitze dieser Hierarchie aufgerufn werden??</p>
<p>Gruß <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/topic/301510/destruktor-aufrufe</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 21:49:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301510.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Mar 2012 22:54:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Destruktor Aufrufe on Wed, 28 Mar 2012 22:54:09 GMT]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>ich habe eine kurze Frage zu den automatischen Destruktoraufrufen und zwar betrachte man folgenden Code</p>
<pre><code class="language-cpp">class A
{
    ~A() {};
};

class B: public A{

    ~B() {};

};

A* b = new B();

delete b;
</code></pre>
<p>Hier wird, wenn ich das richtig verstanden habe, bei &quot;delete b&quot; direkt der Destruktor von Klasse A aufgerufen, da der Destruktor in A nicht virtual ist oder?</p>
<p>Angenommen dieser ist virtual, also der Code sehe folgendermaßen aus</p>
<pre><code class="language-cpp">class A
{
    virtual ~A() {};
};

class B: public A{

    ~B() {};

};

A* b = new B();

delete b;
</code></pre>
<p>Dann wird der Destruktor von B aufgerufen oder?<br />
Ruft dieser anschließend auch automatisch den Destruktor von A auf und würden, falls man meine eine ganze Vererbungshierarchie betrachtet, alle Destruktoren bis zur Spitze dieser Hierarchie aufgerufn werden??</p>
<p>Gruß <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/2196432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2196432</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Wed, 28 Mar 2012 22:54:09 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor Aufrufe on Thu, 29 Mar 2012 05:59:20 GMT]]></title><description><![CDATA[<p>Ja. Anschließend wird automatisch der Konstruktor von A aufgerufen. Das gilt für alle geschchtelten Klassen.</p>
<p>Die Frage ist nur welcher Destruktor ist der erste der aufgerufen wird. Nur virtual garantiert das die äußere Klasse zuerst abgeräumt wird. Sonst muss man casten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2196456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2196456</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 29 Mar 2012 05:59:20 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor Aufrufe on Thu, 29 Mar 2012 05:59:37 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/u100590" rel="nofollow">Martin Richter</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/f1" rel="nofollow">MFC (Visual C++)</a> in das Forum <a href="http://www.c-plusplus.net/forum/f15" rel="nofollow">C++ (auch C++0x und C++11)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2196457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2196457</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 29 Mar 2012 05:59:37 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor Aufrufe on Thu, 29 Mar 2012 06:12:10 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Die Frage ist nur welcher Destruktor ist der erste der aufgerufen wird. Nur virtual garantiert das die äußere Klasse zuerst abgeräumt wird.</p>
</blockquote>
<p>Ne, die äußeren Destruktoren werden immer zu erst aufgerufen, nur ohne virtual wird der Destruktor von B halt gar nicht bemüht.<br />
<a href="http://ideone.com/xWnJc" rel="nofollow">http://ideone.com/xWnJc</a><br />
<a href="http://ideone.com/w6BcN" rel="nofollow">http://ideone.com/w6BcN</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2196460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2196460</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 29 Mar 2012 06:12:10 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor Aufrufe on Thu, 29 Mar 2012 06:42:31 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort, hatte jetzt auch die Möglichkeit es selbst zu testen <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/2196464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2196464</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Thu, 29 Mar 2012 06:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor Aufrufe on Thu, 29 Mar 2012 20:58:13 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25760">@cooky451</a><br />
Martin hat das etwas unglücklich formuliert, aber ihr meint beide das selbe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2196802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2196802</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 29 Mar 2012 20:58:13 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor Aufrufe on Fri, 30 Mar 2012 09:25:51 GMT]]></title><description><![CDATA[<p>MatheStein schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class A
{
    ~A() {};  // &lt;-- kk: hier kommt kein Semikolon hin
};

class B: public A
{
    ~B() {};  // &lt;-- kk: hier kommt kein Semikolon hin
};

A* b = new B();

delete b;
</code></pre>
<p>Hier wird, wenn ich das richtig verstanden habe, bei &quot;delete b&quot; direkt der Destruktor von Klasse A aufgerufen, da der Destruktor in A nicht virtual ist oder?</p>
</blockquote>
<p>Nein. Was bei dem Programm passiert, ist <em>undefiniert</em>. Wenn Du polymorph löschen willst, <em>muss</em> der Destruktor des statischen Typs von *b, also A, virtuell sein. Alles andere ist Murks und Du kannst Dich da auf nichts verlassen, weil das Verhalten undefiniert ist.</p>
<p>MatheStein schrieb:</p>
<blockquote>
<p>Angenommen dieser ist virtual, also der Code sehe folgendermaßen aus</p>
<pre><code class="language-cpp">class A
{
    virtual ~A() {};
};

class B: public A
{
    ~B() {};
};

A* b = new B();

delete b;
</code></pre>
<p>Dann wird der Destruktor von B aufgerufen oder?<br />
Ruft dieser anschließend auch automatisch den Destruktor von A auf und würden, falls man meine eine ganze Vererbungshierarchie betrachtet, alle Destruktoren bis zur Spitze dieser Hierarchie aufgerufn werden??</p>
</blockquote>
<p>Ja und Ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2196910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2196910</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 30 Mar 2012 09:25:51 GMT</pubDate></item></channel></rss>