<?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[Destruktoraufruf]]></title><description><![CDATA[<p>Hi, ich habe eine Klasse A die von der Basisklasse Base erbt:</p>
<pre><code class="language-cpp">class Base
{
public:
	Base() {}
	~Base() {MessageBox(0, &quot;Base::~Base();&quot;, 0, 0);}
	virtual void Report() { MessageBox(0, &quot;Base::Report();&quot;, 0, 0); }
};

class A : public Base
{
public:
	A() {}
	~A() {MessageBox(0, &quot;A::~A();&quot;, 0, 0);}
	void Report() { MessageBox(0, &quot;A::Report();&quot;, 0, 0); }
};
</code></pre>
<p>(Es gibt später auch noch eine Klasse B die von A erbt, und manchmal wird ein Object von A benötigt, manchmal eins von B, deshalb der &quot;Base Pointer&quot;!</p>
<p>Nun erstelle ich ein Object der Klasse A, allerdings über einen &quot;Base Pointer&quot;!</p>
<pre><code class="language-cpp">Base *ptr = new A();

ptr -&gt; Report();  // A::Report() wird aufgerufen

delete ptr;
</code></pre>
<p>Mein Problem ist dass beim löschen von ptr nur der Destruktor der Base Klasse aufgerufen wird, nicht aber der von Klasse A.<br />
Beim erstellen von ptr wird der Konstruktor von A allerdings aufgerufen.</p>
<p>Meine Frage ist nun ob das so zulässig ist wenn ich eine extra Methode als Destruktor für A Implementiere (so wie A::Report(); ) und diese vorm Löschen des Objects manuell aufrufe?<br />
Oder weiß jemand ne elegantere Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/156179/destruktoraufruf</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 18:54:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156179.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Aug 2006 11:15:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Destruktoraufruf on Mon, 14 Aug 2006 11:15:17 GMT]]></title><description><![CDATA[<p>Hi, ich habe eine Klasse A die von der Basisklasse Base erbt:</p>
<pre><code class="language-cpp">class Base
{
public:
	Base() {}
	~Base() {MessageBox(0, &quot;Base::~Base();&quot;, 0, 0);}
	virtual void Report() { MessageBox(0, &quot;Base::Report();&quot;, 0, 0); }
};

class A : public Base
{
public:
	A() {}
	~A() {MessageBox(0, &quot;A::~A();&quot;, 0, 0);}
	void Report() { MessageBox(0, &quot;A::Report();&quot;, 0, 0); }
};
</code></pre>
<p>(Es gibt später auch noch eine Klasse B die von A erbt, und manchmal wird ein Object von A benötigt, manchmal eins von B, deshalb der &quot;Base Pointer&quot;!</p>
<p>Nun erstelle ich ein Object der Klasse A, allerdings über einen &quot;Base Pointer&quot;!</p>
<pre><code class="language-cpp">Base *ptr = new A();

ptr -&gt; Report();  // A::Report() wird aufgerufen

delete ptr;
</code></pre>
<p>Mein Problem ist dass beim löschen von ptr nur der Destruktor der Base Klasse aufgerufen wird, nicht aber der von Klasse A.<br />
Beim erstellen von ptr wird der Konstruktor von A allerdings aufgerufen.</p>
<p>Meine Frage ist nun ob das so zulässig ist wenn ich eine extra Methode als Destruktor für A Implementiere (so wie A::Report(); ) und diese vorm Löschen des Objects manuell aufrufe?<br />
Oder weiß jemand ne elegantere Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1116846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1116846</guid><dc:creator><![CDATA[Gast_32]]></dc:creator><pubDate>Mon, 14 Aug 2006 11:15:17 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktoraufruf on Mon, 14 Aug 2006 11:16:29 GMT]]></title><description><![CDATA[<p>Destruktor virtuell machen du Honk! Ist wie bei den anderen Methoden auch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1116847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1116847</guid><dc:creator><![CDATA[Mann mit Ahnung]]></dc:creator><pubDate>Mon, 14 Aug 2006 11:16:29 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktoraufruf on Mon, 14 Aug 2006 13:12:44 GMT]]></title><description><![CDATA[<p>Müsst ihr immer so nett sein?</p>
<p>Naja, wenigstens stimmts...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1116958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1116958</guid><dc:creator><![CDATA[Nett0r]]></dc:creator><pubDate>Mon, 14 Aug 2006 13:12:44 GMT</pubDate></item></channel></rss>