<?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[Objekt zerstören, wenn es nicht mehr referenziert wird]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe ein Objekt vom Typ Foo im Heap, auf das mehrere Klassen A,B etc zeigen.<br />
(A hat also einen Zeiger Foo* f, B auch usw).<br />
Wie mache ich das nun, dass Foo korrekt gelöscht wird?</p>
<p>Ich kann ja nicht einfach im Dtor von A ein delete foo; machen, da ich dann bei einem Zugriff von B auf Foo auf gelöschten Speicher zugreifen würde.<br />
Ich dachte an eine Art Referenzzähler eine Methode release:<br />
release() { counter--; if(counter == 0) delete this; }</p>
<p>Wenn kein Objekt mehr auf Foo zeigt, löscht es sich also selber. Geht dieses delete this?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/206937/objekt-zerstören-wenn-es-nicht-mehr-referenziert-wird</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 19:55:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/206937.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Mar 2008 18:33:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekt zerstören, wenn es nicht mehr referenziert wird on Sat, 01 Mar 2008 18:33:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe ein Objekt vom Typ Foo im Heap, auf das mehrere Klassen A,B etc zeigen.<br />
(A hat also einen Zeiger Foo* f, B auch usw).<br />
Wie mache ich das nun, dass Foo korrekt gelöscht wird?</p>
<p>Ich kann ja nicht einfach im Dtor von A ein delete foo; machen, da ich dann bei einem Zugriff von B auf Foo auf gelöschten Speicher zugreifen würde.<br />
Ich dachte an eine Art Referenzzähler eine Methode release:<br />
release() { counter--; if(counter == 0) delete this; }</p>
<p>Wenn kein Objekt mehr auf Foo zeigt, löscht es sich also selber. Geht dieses delete this?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1466250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1466250</guid><dc:creator><![CDATA[ObjLöscher]]></dc:creator><pubDate>Sat, 01 Mar 2008 18:33:51 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt zerstören, wenn es nicht mehr referenziert wird on Sat, 01 Mar 2008 18:37:47 GMT]]></title><description><![CDATA[<p>Das kannst du sicher so machen. Afaik machen das die Smartpointer auch so.</p>
<p>Wenn du es nicht selber schfeiben willst, hilft dir da boost.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1466256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1466256</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 01 Mar 2008 18:37:47 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt zerstören, wenn es nicht mehr referenziert wird on Sat, 01 Mar 2008 19:49:00 GMT]]></title><description><![CDATA[<p>Ja, &quot;delete this&quot; ist OK.<br />
(Natürlich darf &quot;this&quot; danach weder explizit noch implizit dereferenziert werden, was auch irgendwo logisch sein sollte.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1466299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1466299</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 01 Mar 2008 19:49:00 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt zerstören, wenn es nicht mehr referenziert wird on Sat, 01 Mar 2008 20:23:46 GMT]]></title><description><![CDATA[<p>Wäre hier nicht ein <a href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" rel="nofollow">shared_ptr</a> die Lösung? Der macht inetrn Referenzzählung und du musst dich darum nicht kümmern.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1466318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1466318</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 01 Mar 2008 20:23:46 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt zerstören, wenn es nicht mehr referenziert wird on Sat, 01 Mar 2008 20:50:13 GMT]]></title><description><![CDATA[<p>std::tr1::shared_ptr&lt;T&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1466332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1466332</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sat, 01 Mar 2008 20:50:13 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt zerstören, wenn es nicht mehr referenziert wird on Sat, 01 Mar 2008 23:48:25 GMT]]></title><description><![CDATA[<p>Danke Leute, ihr seid die Besten. <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>
<p>Noch 2 kleine Fragen:<br />
1. Was basiert wenn ich delete this auf ein Objekt auf dem Heap aufrufe?<br />
2. Was muss ich für std::tr1::shared_ptr einbinden (Header, Lib)? Ich benutze VS 05.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1466405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1466405</guid><dc:creator><![CDATA[ObjLöscher]]></dc:creator><pubDate>Sat, 01 Mar 2008 23:48:25 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt zerstören, wenn es nicht mehr referenziert wird on Sun, 02 Mar 2008 09:01:04 GMT]]></title><description><![CDATA[<p>ObjLöscher schrieb:</p>
<blockquote>
<p>Danke Leute, ihr seid die Besten. <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>
<p>Noch 2 kleine Fragen:<br />
1. Was basiert wenn ich delete this auf ein Objekt auf dem Heap aufrufe?</p>
</blockquote>
<p>Undefiniert, da du delete nur für Objekte auf dem free store verwenden darfst.</p>
<p>Wenn du allerdings das Objekt mit new angelegt hast ist es bereits im free store (in den heap bekommst du Objekte mit malloc() ) wird wohl der destructor aufgerufen und der Speicher freigegeben</p>
<blockquote>
<p>2. Was muss ich für std::tr1::shared_ptr einbinden (Header, Lib)? Ich benutze VS 05.</p>
</blockquote>
<p>boost::tr1 oder auf VC08 updaten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1466449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1466449</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sun, 02 Mar 2008 09:01:04 GMT</pubDate></item></channel></rss>