<?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[wozu virtual dtor?]]></title><description><![CDATA[<p>Die Ausgabe sieht immer gleich aus, egal ob ich virtual vor &quot;~c1&quot; schreibe oder nicht. Wieso geht das überhaupt? Ich glaube mal gehört zu haben, dass man den Destruktor als virtual deklarieren soll. Aber man kann den doch sowieso nicht überschreiben.<br />
Kann mich jemand aufklären?</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;

class c1 {
  public:
    c1() {
      cout&lt;&lt;&quot;ctor c1&quot;&lt;&lt;endl;
    }
    /*vitual*/ ~c1() {
      cout&lt;&lt;&quot;dtor c1&quot;&lt;&lt;endl;
    }
};

class c2 : public c1 {
  public:
    c2() {
      cout&lt;&lt;&quot;ctor c2&quot;&lt;&lt;endl;
    }   
    ~c2() {
      cout&lt;&lt;&quot;dtor c2&quot;&lt;&lt;endl;
    }
};

int main(int argc, char *argv[]) {
  {
    c2 test;
  }
  system(&quot;PAUSE&quot;);
  return EXIT_SUCCESS;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/182046/wozu-virtual-dtor</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 10:51:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/182046.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 May 2007 18:46:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to wozu virtual dtor? on Sun, 20 May 2007 18:46:21 GMT]]></title><description><![CDATA[<p>Die Ausgabe sieht immer gleich aus, egal ob ich virtual vor &quot;~c1&quot; schreibe oder nicht. Wieso geht das überhaupt? Ich glaube mal gehört zu haben, dass man den Destruktor als virtual deklarieren soll. Aber man kann den doch sowieso nicht überschreiben.<br />
Kann mich jemand aufklären?</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;

class c1 {
  public:
    c1() {
      cout&lt;&lt;&quot;ctor c1&quot;&lt;&lt;endl;
    }
    /*vitual*/ ~c1() {
      cout&lt;&lt;&quot;dtor c1&quot;&lt;&lt;endl;
    }
};

class c2 : public c1 {
  public:
    c2() {
      cout&lt;&lt;&quot;ctor c2&quot;&lt;&lt;endl;
    }   
    ~c2() {
      cout&lt;&lt;&quot;dtor c2&quot;&lt;&lt;endl;
    }
};

int main(int argc, char *argv[]) {
  {
    c2 test;
  }
  system(&quot;PAUSE&quot;);
  return EXIT_SUCCESS;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1288658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288658</guid><dc:creator><![CDATA[obbba]]></dc:creator><pubDate>Sun, 20 May 2007 18:46:21 GMT</pubDate></item><item><title><![CDATA[Reply to wozu virtual dtor? on Sun, 20 May 2007 19:06:00 GMT]]></title><description><![CDATA[<p>die antwort :</p>
<pre><code class="language-cpp">class base1
{
public:
 ~base1() { cout &lt;&lt; &quot;base1::dtor&quot; &lt;&lt; endl; }
};

class derived1: public base1
{
public:
 ~derived1() { cout &lt;&lt; &quot;derived1::dtor&quot; &lt;&lt; endl; }
};

class base2
{
public:
 virtual ~base2() { cout &lt;&lt; &quot;base2::dtor&quot; &lt;&lt; endl; }
};

class derived2: public base2
{
public:
 virtual ~derived2() { cout &lt;&lt; &quot;derived2::dtor&quot; &lt;&lt; endl; }
};

int main(int, char**)
{
 base1 *pb1 = new derived1(); 
 base2 *pb2 = new derived2();

 delete pb1; // -&gt; &quot;base1::dtor&quot;, potentieller ressource leak
 delete pb2; // -&gt; &quot;derived2::dtor \n base::dtor&quot;, alles sauber

 return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1288667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288667</guid><dc:creator><![CDATA[inp]]></dc:creator><pubDate>Sun, 20 May 2007 19:06:00 GMT</pubDate></item><item><title><![CDATA[Reply to wozu virtual dtor? on Sun, 20 May 2007 19:03:07 GMT]]></title><description><![CDATA[<p>naja, probier doch mal das <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>
<pre><code class="language-cpp">class a
{
public:
  ~a() { cout &lt;&lt; &quot;a::destructor&quot; &lt;&lt; endl; };
};

class b : public a
{
public:
  b() : m_Data(new char[1024]) { cout &lt;&lt; &quot;Allocation memory&quot; &lt;&lt; endl };
  ~b() { delete [] m_Data; cout &lt;&lt; &quot;Deleting mem in ~b&quot; &lt;&lt; endl; };

char* m_Data;
};

int main()
{
  a* ptr = new b; // speicher für 1024 chars wird reserviert
  delete ptr;     // und nicht wieder freigegeben
}
</code></pre>
<p>Hätte jetzt a einen virtuellen destruktor würde der überschrieben b::~b aufgerufen werden, so wird a::~a aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1288668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288668</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Sun, 20 May 2007 19:03:07 GMT</pubDate></item><item><title><![CDATA[Reply to wozu virtual dtor? on Sun, 20 May 2007 19:10:44 GMT]]></title><description><![CDATA[<p>wonderbar<br />
→ <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/1288674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1288674</guid><dc:creator><![CDATA[obbba]]></dc:creator><pubDate>Sun, 20 May 2007 19:10:44 GMT</pubDate></item></channel></rss>