<?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[Virtueller Destruktor, wenn eigentlich keiner benötigt wird]]></title><description><![CDATA[<p>Also falls ein Objekt über einen Basisklassenzeiger deleted werden kann, sollte der Basisklassen-Destruktor ja virtuell sein. So als Faustregel.</p>
<p>Was aber wenn ich eigentlich garnkeinen Destrukor benötige? Wenn ich also nicht mit rohem Speicher oder anderen Ressourcen hantiere. Soll (oder muss) dann ein leerer virtueller Destruktor in die Basisklasse aufgenommen werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/308835/virtueller-destruktor-wenn-eigentlich-keiner-benötigt-wird</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 15:11:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/308835.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 07 Oct 2012 13:23:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Virtueller Destruktor, wenn eigentlich keiner benötigt wird on Sun, 07 Oct 2012 13:23:45 GMT]]></title><description><![CDATA[<p>Also falls ein Objekt über einen Basisklassenzeiger deleted werden kann, sollte der Basisklassen-Destruktor ja virtuell sein. So als Faustregel.</p>
<p>Was aber wenn ich eigentlich garnkeinen Destrukor benötige? Wenn ich also nicht mit rohem Speicher oder anderen Ressourcen hantiere. Soll (oder muss) dann ein leerer virtueller Destruktor in die Basisklasse aufgenommen werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2257864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2257864</guid><dc:creator><![CDATA[MixeryCastle]]></dc:creator><pubDate>Sun, 07 Oct 2012 13:23:45 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Destruktor, wenn eigentlich keiner benötigt wird on Sun, 07 Oct 2012 13:25:05 GMT]]></title><description><![CDATA[<p>&quot;Wenn ich also nicht mit rohem Speicher oder anderen Ressourcen hantiere.&quot;</p>
<p>Innerhalb der Klasse, meine ich damit! Außerhalb natürlich schon, denn wir legen die Objekte ja mit new an und wollen sie mit einem Basisklassenzeiger löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2257867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2257867</guid><dc:creator><![CDATA[MixeryCastle]]></dc:creator><pubDate>Sun, 07 Oct 2012 13:25:05 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Destruktor, wenn eigentlich keiner benötigt wird on Sun, 07 Oct 2012 13:49:44 GMT]]></title><description><![CDATA[<p>Das betrifft hier viel grundlegendere Dinge als dynamischen Speicher: Die Member selbst werden dann nicht richtig freigegeben. Destruktoren werden schließlich rekursiv aufgerufen:</p>
<pre><code class="language-cpp">class Base
{
 Member member;
};

class Derived: public Base
{
 OtherMember other_member;
};

// ...
Base *foo = new Derived;
Derived *bar = new Derived;
// ...

delete bar; // Alles wird aufgeräumt
delete foo; // Oh nein, der Destruktor von OtherMember (und der von Derived) wird nicht aufgerufen!
</code></pre>
<p>Die abgeleitete Klasse sollte also besser keine eigenen Member haben, wenn der Destruktor nicht virtuell ist. Fragt sich dann bloß, wozu die abgeleitete Klasse gut sein soll, wenn sie nur Funktionen bietet. Das deutet meistens darauf hin, dass eigentlich freie Funktionen mit einem Base als Parameter eher angesagt wären.</p>
<p>Falls du glaubst, dass du dein Programm super beschleunigen kannst, indem du dir den virtuellen Destruktor sparst: Höchstwahrscheinlich bringt es überhaupt nichts. Wie oft wird der schon aufgerufen? Und wenn du mit Basisklassenzeigern hantierst hast du ja meistens sowieso Polymorphie und damit noch weitere virtuelle Funktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2257876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2257876</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 07 Oct 2012 13:49:44 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Destruktor, wenn eigentlich keiner benötigt wird on Sun, 07 Oct 2012 13:49:28 GMT]]></title><description><![CDATA[<p>Ok, danke.</p>
<p>Also ist die Lösung ein virtueller Destruktor mit leerem Rumpf in der Basisklasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2257877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2257877</guid><dc:creator><![CDATA[MixeryCastle]]></dc:creator><pubDate>Sun, 07 Oct 2012 13:49:28 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Destruktor, wenn eigentlich keiner benötigt wird on Sun, 07 Oct 2012 13:50:26 GMT]]></title><description><![CDATA[<p>Wenn in einer delete-Anweisung der statische Typ des Objekts, auf das der übergebene Zeiger zeigt, nicht mit dem dynamischen Typ übereinstimmt (also delete über ein Basisklassensubobjekt verwendet wird) und der statische Typ nicht über einen virtuellen Destruktor verfügt, ist das Verhalten undefiniert. Es kommt nicht darauf an, wie das Objekt konkret aufgebaut ist und ob evtl. im Destruktor eigentlich nichts weiter zu tun ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2257878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2257878</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 07 Oct 2012 13:50:26 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Destruktor, wenn eigentlich keiner benötigt wird on Sun, 07 Oct 2012 13:53:30 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Wenn in einer delete-Anweisung der statische Typ des Objekts, auf das der übergebene Zeiger zeigt, nicht mit dem dynamischen Typ übereinstimmt (also delete über ein Basisklassensubobjekt verwendet wird) und der statische Typ nicht über einen virtuellen Destruktor verfügt, ist das Verhalten undefiniert. Es kommt nicht darauf an, wie das Objekt konkret aufgebaut ist und ob evtl. im Destruktor eigentlich nichts weiter zu tun ist.</p>
</blockquote>
<p>Also kurz: das ist UB?</p>
<pre><code class="language-cpp">struct A {};
struct B : A {};

int main()
{
    delete (A*)new B;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2257880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2257880</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 07 Oct 2012 13:53:30 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Destruktor, wenn eigentlich keiner benötigt wird on Sun, 07 Oct 2012 14:11:55 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Wenn in einer delete-Anweisung der statische Typ des Objekts, auf das der übergebene Zeiger zeigt, nicht mit dem dynamischen Typ übereinstimmt (also delete über ein Basisklassensubobjekt verwendet wird) und der statische Typ nicht über einen virtuellen Destruktor verfügt, ist das Verhalten undefiniert. Es kommt nicht darauf an, wie das Objekt konkret aufgebaut ist und ob evtl. im Destruktor eigentlich nichts weiter zu tun ist.</p>
</blockquote>
<p>Also kurz: das ist UB?</p>
<pre><code class="language-cpp">struct A {};
struct B : A {};

int main()
{
    delete (A*)new B;
}
</code></pre>
</blockquote>
<p>ja. 5.3.5/3</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2257887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2257887</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 07 Oct 2012 14:11:55 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Destruktor, wenn eigentlich keiner benötigt wird on Mon, 08 Oct 2012 07:22:48 GMT]]></title><description><![CDATA[<p>Klassen die in der Liste der Liste der Basisklassen stehen, sollen entweder ein <strong>public virtual</strong> ODER einen <strong>protected non-virtual</strong> Destruktor haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2258050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2258050</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Mon, 08 Oct 2012 07:22:48 GMT</pubDate></item></channel></rss>