<?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[Virtuelle Destruktoren]]></title><description><![CDATA[<p>Ich habe mich gerade gefragt, ob ein virtueller Destruktor in einer Vererbungskette reicht. Offensichtlich tut er das:</p>
<pre><code class="language-cpp">class A
{
public:
  virtual ~A()
  {
    std::cout &lt;&lt; &quot;A\n&quot;;
  }
};

class B : public A
{
public:
  ~B()
  {
    std::cout &lt;&lt; &quot;B\n&quot;;
  }
};

class C : public B
{
public:
  ~C()
  {
    std::cout &lt;&lt; &quot;C\n&quot;;
  }
};

int main()
{
  B* b = new C;
  delete b;
}
</code></pre>
<p>Hier wird A, B, und C ausgegeben. Warum ist das so? Ich hätte erwartet, dass ich den Destruktor von B auch virtual machen muss.</p>
<p>Vielen Dank für eure Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294598/virtuelle-destruktoren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 19:44:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294598.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Oct 2011 22:15:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Virtuelle Destruktoren on Thu, 27 Oct 2011 22:15:45 GMT]]></title><description><![CDATA[<p>Ich habe mich gerade gefragt, ob ein virtueller Destruktor in einer Vererbungskette reicht. Offensichtlich tut er das:</p>
<pre><code class="language-cpp">class A
{
public:
  virtual ~A()
  {
    std::cout &lt;&lt; &quot;A\n&quot;;
  }
};

class B : public A
{
public:
  ~B()
  {
    std::cout &lt;&lt; &quot;B\n&quot;;
  }
};

class C : public B
{
public:
  ~C()
  {
    std::cout &lt;&lt; &quot;C\n&quot;;
  }
};

int main()
{
  B* b = new C;
  delete b;
}
</code></pre>
<p>Hier wird A, B, und C ausgegeben. Warum ist das so? Ich hätte erwartet, dass ich den Destruktor von B auch virtual machen muss.</p>
<p>Vielen Dank für eure Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136913</guid><dc:creator><![CDATA[umpf]]></dc:creator><pubDate>Thu, 27 Oct 2011 22:15:45 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Destruktoren on Thu, 27 Oct 2011 22:22:45 GMT]]></title><description><![CDATA[<p>Wenn der Destruktor einer Basisklasse virtual ist, ist es auch der Destruktor aller von ihr abgelittenen Klassen; du musst es in diesen dann nicht mehr explizit hinschreiben. Der Zeiger in der vtbl muss ja sowieso entsprechend gesetzt werden, für den Fall, dass das Ding mal als Basisklasse&amp; benutzt wird.</p>
<p>Das gilt übrigens für alle virtuellen Funktionen, nicht nur für den Destruktor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136915</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 27 Oct 2011 22:22:45 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Destruktoren on Thu, 27 Oct 2011 22:42:32 GMT]]></title><description><![CDATA[<p>Danke, du hast mir sehr geholfen. Ist es dann bevorzugter Stil, das virtual trotzdem immer hinzuschreiben (auch in Hinblick auf normale Funktionen), oder lässt man das lieber weg?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136916</guid><dc:creator><![CDATA[umpf]]></dc:creator><pubDate>Thu, 27 Oct 2011 22:42:32 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Destruktoren on Thu, 27 Oct 2011 22:54:45 GMT]]></title><description><![CDATA[<p>umpf schrieb:</p>
<blockquote>
<p>Danke, du hast mir sehr geholfen. Ist es dann bevorzugter Stil, das virtual trotzdem immer hinzuschreiben (auch in Hinblick auf normale Funktionen), oder lässt man das lieber weg?</p>
</blockquote>
<p>Hättest du nach dem Verhalten fragen müssen, wenn bei der erbenden Klasse ein virtual stünde?<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Ein Weglassen verbirgt ja nur (interessante) Informationen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136917</guid><dc:creator><![CDATA[Gegenfrage]]></dc:creator><pubDate>Thu, 27 Oct 2011 22:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to Virtuelle Destruktoren on Thu, 27 Oct 2011 23:46:44 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>abgelittenen Klassen;</p>
</blockquote>
<p>Wir leiden mit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136921</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 27 Oct 2011 23:46:44 GMT</pubDate></item></channel></rss>