<?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 erbender Klasse wird aufgerufen? Warum?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin etwas verwirrt. Ich habe eine KLasse die von einer anderen erbt. Instantiiere ich diese Klasse lokal auf dem stack wird der destruktor nicht der eigenen klasse sondern der der klasse aufgerufen von der geerbt wird - warum ist das so und wie kann ich das umgehen? Umgehen weil damit auf member im destruktor zugegriffen wird die gar nicht gesetzt sind und damit ein seg-fault entsteht....</p>
<p>Bsp.:</p>
<pre><code class="language-cpp">class myClass
{
    public:
        myClass(int len_p) 
       { 
           len = len_p
        };

        ~myClass()
         {
             // hier wird auf den member len
             // zugegriffen der aber für myClass2 nicht
             // gesetzt ist.
              for ( int i = 0; i &lt; len; i++)
                foo();
         };

       void func() { // do something 
          };

       int len;
};

class myClass2 : public myClass
{
    public: 
        bar() { std::cout &lt;&lt; &quot;hallo&quot; &lt;&lt; std::endl; };

};

// irgendwo in der main z.B.

myClass2 mc2;
mc2.func();

// wird die main verlassen wird mc2 zerstört und seltsamerweise der destruktor von myClass aufgerufen? 0
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/247246/destruktor-erbender-klasse-wird-aufgerufen-warum</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 16:55:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247246.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 08 Aug 2009 10:51:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Destruktor erbender Klasse wird aufgerufen? Warum? on Sat, 08 Aug 2009 10:51:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin etwas verwirrt. Ich habe eine KLasse die von einer anderen erbt. Instantiiere ich diese Klasse lokal auf dem stack wird der destruktor nicht der eigenen klasse sondern der der klasse aufgerufen von der geerbt wird - warum ist das so und wie kann ich das umgehen? Umgehen weil damit auf member im destruktor zugegriffen wird die gar nicht gesetzt sind und damit ein seg-fault entsteht....</p>
<p>Bsp.:</p>
<pre><code class="language-cpp">class myClass
{
    public:
        myClass(int len_p) 
       { 
           len = len_p
        };

        ~myClass()
         {
             // hier wird auf den member len
             // zugegriffen der aber für myClass2 nicht
             // gesetzt ist.
              for ( int i = 0; i &lt; len; i++)
                foo();
         };

       void func() { // do something 
          };

       int len;
};

class myClass2 : public myClass
{
    public: 
        bar() { std::cout &lt;&lt; &quot;hallo&quot; &lt;&lt; std::endl; };

};

// irgendwo in der main z.B.

myClass2 mc2;
mc2.func();

// wird die main verlassen wird mc2 zerstört und seltsamerweise der destruktor von myClass aufgerufen? 0
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757314</guid><dc:creator><![CDATA[gambo]]></dc:creator><pubDate>Sat, 08 Aug 2009 10:51:17 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor erbender Klasse wird aufgerufen? Warum? on Sat, 08 Aug 2009 10:58:56 GMT]]></title><description><![CDATA[<p>ok wie gerade gelesen schein das so gewollt zu sein - nur wie kann ich das umgehen dass der destruktor der basisklasse nicht aufgerufen wird? MUss ich dazu die vererbung meiden also wieder rausnehmen? gibt es kein hilfsmittel um den destruktor der basisklasse NICHT aufrufen zu lassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757319</guid><dc:creator><![CDATA[gambo]]></dc:creator><pubDate>Sat, 08 Aug 2009 10:58:56 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor erbender Klasse wird aufgerufen? Warum? on Sat, 08 Aug 2009 10:59:56 GMT]]></title><description><![CDATA[<p>Weil ein <code>MyClass2</code> Objekt auch ein <code>MyClass</code> Objekt ist. Wenn also das <code>MyClass2</code> Objekt zerstört wird, dann wird auch das <code>MyClass</code> Objekt zerstört. Destruktoren werden immer so aufgerufen, was auch Sinn macht. Deshalb sollte man bei Veerbung den Destruktor auch <code>virtual</code> machen. Damit der Basisdestruktor and den am weitesten abgeleiteten Destruktor übergibt. Von dort wird das Objekt dann Klasse für Klasse in der Hierarchie rückwärts abgebaut.</p>
<p>Es gibt keine Möglichkeit dies zu umgehen und es macht auch absolut keinen Sinn, sowas umgehen zu wollen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757321</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 08 Aug 2009 10:59:56 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor erbender Klasse wird aufgerufen? Warum? on Sat, 08 Aug 2009 11:02:14 GMT]]></title><description><![CDATA[<p>Das ist ganz normales Verhalten und auch gut so. Die abgeleitete Klasse heinhaltet ja die Basisklasse und somit auch alle Member. Der ctor der Baisklasse wird aufgerufen und daher muss der dtor ebenfalls aufgerufen werden.</p>
<p>Allerdings glaube ich nicht, dass das kompiliert, da du gar keinen Konstruktor für die Basisklasse aufrufst. Und allgmein ist dein Code voller Fehler. Ist es denn so schwer ein funktionierendes Beispiel zu posten?</p>
<p>Wenn dein Code nämlich überhaupt sinnvoll wäre, dann wäre auch der Aufruf des Destruktors kein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757322</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 08 Aug 2009 11:02:14 GMT</pubDate></item></channel></rss>