<?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[virtual Destruktor]]></title><description><![CDATA[<p>normalerweise muss man destruktor als virtual definieren, dann bei delete object von der base class wird das objekt von der abgeleiteten class auch mitgelöscht</p>
<pre><code>class Base
{
  public:
  virtual ~Base();
}
class Derived : public Base
{
  public:
  f1();
  ~Derived();
} 

void main()
{
  Base *b = new Derived();
  delete b;
}
</code></pre>
<p>Aber wie wird das Mechanisum ausgelöst?</p>
<pre><code>object von Derived
------
|vptr|--------&gt;&amp;~Base()
|    |--------&gt;&amp;~Derived()
------
|f1  |
------
</code></pre>
<p>bei delete b wird ~Base ausgelöst, weil b ist vom typ Base<br />
~Derived wird nicht aufgerufen.<br />
Ergebnis ist allerdings anders, ~Base und ~Derived werden hintereinander aufgerufen, wie erklärt man mit v-table?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/135929/virtual-destruktor</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 06:30:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/135929.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Feb 2006 09:34:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to virtual Destruktor on Mon, 06 Feb 2006 09:34:43 GMT]]></title><description><![CDATA[<p>normalerweise muss man destruktor als virtual definieren, dann bei delete object von der base class wird das objekt von der abgeleiteten class auch mitgelöscht</p>
<pre><code>class Base
{
  public:
  virtual ~Base();
}
class Derived : public Base
{
  public:
  f1();
  ~Derived();
} 

void main()
{
  Base *b = new Derived();
  delete b;
}
</code></pre>
<p>Aber wie wird das Mechanisum ausgelöst?</p>
<pre><code>object von Derived
------
|vptr|--------&gt;&amp;~Base()
|    |--------&gt;&amp;~Derived()
------
|f1  |
------
</code></pre>
<p>bei delete b wird ~Base ausgelöst, weil b ist vom typ Base<br />
~Derived wird nicht aufgerufen.<br />
Ergebnis ist allerdings anders, ~Base und ~Derived werden hintereinander aufgerufen, wie erklärt man mit v-table?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/987152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/987152</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Mon, 06 Feb 2006 09:34:43 GMT</pubDate></item><item><title><![CDATA[Reply to virtual Destruktor on Mon, 06 Feb 2006 09:43:37 GMT]]></title><description><![CDATA[<p>b ist zwar offiziell vom Typ Base, wurde aber mit &quot;new Derived()&quot; erzeugt, deshalb verweist sein vptr auch auf die vtable von Derived (in der unter &quot;Destruktor&quot; der ~Derived() eingetragen ist.</p>
<p>Dazu kommt noch, daß der Compiler nach deinen eigenen Dtor-Anweisungen noch alle Dtoren der Membervariablen und der Basisklasse(n) aufruft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/987165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/987165</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Mon, 06 Feb 2006 09:43:37 GMT</pubDate></item><item><title><![CDATA[Reply to virtual Destruktor on Mon, 06 Feb 2006 20:49:59 GMT]]></title><description><![CDATA[<p>netrobot schrieb:</p>
<blockquote>
<p>normalerweise muss man destruktor als virtual definieren</p>
</blockquote>
<p>Naja, &quot;normalerweise&quot; ist relativ. Virtuelle dtors machen nur bei public Vererbung Sinn, und selbst dann nicht immer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/988086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/988086</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Mon, 06 Feb 2006 20:49:59 GMT</pubDate></item></channel></rss>