<?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 aus Memberfunktion aufrufen?]]></title><description><![CDATA[<p>Ist folgendes erlaubt?</p>
<pre><code class="language-cpp">class T
{
   ~T() {foo;}

   bool hallo() {delete this; return true;}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/291773/destruktor-aus-memberfunktion-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 13:56:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291773.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Aug 2011 14:12:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 14:12:25 GMT]]></title><description><![CDATA[<p>Ist folgendes erlaubt?</p>
<pre><code class="language-cpp">class T
{
   ~T() {foo;}

   bool hallo() {delete this; return true;}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2111065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111065</guid><dc:creator><![CDATA[destrict0r]]></dc:creator><pubDate>Fri, 26 Aug 2011 14:12:25 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 14:22:40 GMT]]></title><description><![CDATA[<p>Ja.</p>
<p><strong>EDIT</strong><br />
Mal abgesehen davon dass nirgens spezifiziert ist, was foo ist.</p>
<p><strong>EDIT2</strong><br />
Und natürlich muss das Objekt auch mit new erzeugt worden sein.<br />
Hier ein wenig ausführlicher:<br />
<a href="http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.15" rel="nofollow">http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.15</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111073</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Fri, 26 Aug 2011 14:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 14:25:23 GMT]]></title><description><![CDATA[<p>destrict0r schrieb:</p>
<blockquote>
<p>Ist folgendes erlaubt?</p>
</blockquote>
<p>Auf Grund der potentiellen Probleme (z.B. delete auf Stackobjekt etc.) bleibt aber die Frage, ob es für deinen Fall nicht etwas besseres gibt. Vielleicht beschreibst du erst einmal wozu du es brauchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111077</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 26 Aug 2011 14:25:23 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 14:39:05 GMT]]></title><description><![CDATA[<p>T wird mit new erzeugt.</p>
<p>T ist eine Spieler-Klasse, die mit &quot;t-&gt;hallo()&quot; geupdated wird. Wenn sie in &quot;hallo&quot; feststellt, dass sie z.B. mit dem Feind kollidiert ist, soll sie sich selbst löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111081</guid><dc:creator><![CDATA[destrict0r]]></dc:creator><pubDate>Fri, 26 Aug 2011 14:39:05 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 14:42:45 GMT]]></title><description><![CDATA[<p>destrict0r schrieb:</p>
<blockquote>
<p>Wenn sie in &quot;hallo&quot; feststellt, dass sie z.B. mit dem Feind kollidiert ist, soll sie sich selbst löschen.</p>
</blockquote>
<p>Ganz selbst löschen kann sie sich eh nicht, da sie wahrscheinlich in einem Container steckt oder durch eine andere Variable im Programm referenziert wird. Also musst du diesen Verweise noch entfernen. Und dann kannst du gleich das <code>delete</code> ausserhalb schreiben.</p>
<p>Generell sollte Anforderung und Allokation möglichst symmetrisch sein. Wenn jemand das Objekt mit <code>new</code> erstellt, sollte er (und nicht irgendwer sonst) es wieder zerstören. Falls du dann mal was änderst, musst du das nur an einer Stelle tun. Oder noch besser, du nimmst gleich Smart-Pointer und brauchst gar kein <code>delete</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111085</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 26 Aug 2011 14:42:45 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 14:48:22 GMT]]></title><description><![CDATA[<p>[quote=&quot;Nexus&quot;]</p>
<p>destrict0r schrieb:</p>
<blockquote>
<p>Und dann kannst du gleich das <code>delete</code> ausserhalb schreiben.</p>
</blockquote>
<p>Und wo außerhalb? Und woher soll das außerhalb wissen, dass der Spieler getroffen wurde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111089</guid><dc:creator><![CDATA[destrict0r]]></dc:creator><pubDate>Fri, 26 Aug 2011 14:48:22 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 14:51:43 GMT]]></title><description><![CDATA[<p>Ich dachte, dass ich einen CollisionObjectManager habe, über den alle Kollisionsobjekte erzeugt/gespeichert/gelöscht werden. Und alle Kollisionsobjekte haben eine &quot;update&quot;-Funktion. Könnte ich nicht aus der die Löschroutine des Managers mit this als Parameter aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111091</guid><dc:creator><![CDATA[destrict0r]]></dc:creator><pubDate>Fri, 26 Aug 2011 14:51:43 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 14:52:34 GMT]]></title><description><![CDATA[<p>destrict0r schrieb:</p>
<blockquote>
<p>Und wo außerhalb? Und woher soll das außerhalb wissen, dass der Spieler getroffen wurde?</p>
</blockquote>
<pre><code class="language-cpp">boost::ptr_vector&lt;T&gt; myTs;
...
t-&gt;hallo();
if ( t-&gt;isDead() )
    myTs.erase( t );
</code></pre>
<p>Oder so. Irgendwo &quot;außerhalb&quot; hast du ja das Objekt noch gespeichert. Wenn du es in &quot;hallo&quot; destruierst, kriegt der Speichernde das ja nicht mit und versucht weiterhin, darauf zuzugreifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111092</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Fri, 26 Aug 2011 14:52:34 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 14:55:26 GMT]]></title><description><![CDATA[<p>Oder soll ich lieber in der update-Routine ein Flag des CollisionObjekts &quot;isDeleted&quot; auf true setzen und dann von außen im Manager über alle CollsisionObjects iterieren und sie ggf. löschen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111094</guid><dc:creator><![CDATA[destrict0r]]></dc:creator><pubDate>Fri, 26 Aug 2011 14:55:26 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 15:01:38 GMT]]></title><description><![CDATA[<p>isDeleted ist ungünstig. Nimm besser etwas, was den Zustand des Objektes beschreibt. Der, der das Objekt erzeugt hat kann dann entscheiden ob er es zerstören möchte oder doch lieber noch behalten.<br />
Das Objekt soll seinem Besitzer nicht vorschreiben was er damit zu tun hat, sondern ihn nur darüber informieren, was mit ihm los ist. Was dann damit passieren soll liegt (sowieso) beim Besitzer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111096</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 26 Aug 2011 15:01:38 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 15:11:27 GMT]]></title><description><![CDATA[<p>Also sowas wie &quot;isDestroyed&quot;? Dann ist mein Vorschlag OK?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111099</guid><dc:creator><![CDATA[destrict0r]]></dc:creator><pubDate>Fri, 26 Aug 2011 15:11:27 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 15:12:32 GMT]]></title><description><![CDATA[<p>isDead oder isAlive sieht man alle Nase lang.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111101</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 26 Aug 2011 15:12:32 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 15:14:43 GMT]]></title><description><![CDATA[<p>hasCollided könnte doch auch gehen, wenn das die Semantik ist. Manche Sachen überstehen ja vielleicht auch mehrere Kollisionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111102</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Fri, 26 Aug 2011 15:14:43 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 15:18:26 GMT]]></title><description><![CDATA[<p>fdfdg schrieb:</p>
<blockquote>
<p>hasCollided könnte doch auch gehen, wenn das die Semantik ist. Manche Sachen überstehen ja vielleicht auch mehrere Kollisionen.</p>
</blockquote>
<p>Das verbessert nur wenig.</p>
<pre><code class="language-cpp">boost::ptr_vector&lt;T&gt; myTs;
...
t-&gt; hallo( );
if (  t-&gt; hasCollided( )  )
    if (  t-&gt; isDead( )  )
        myTs. erase( t );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2111103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111103</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 26 Aug 2011 15:18:26 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 15:19:52 GMT]]></title><description><![CDATA[<p>Collided ist auch nicht gut. Das ist eher ein Event. Denn normalerweise passieren ständig Kollisionen (mit dem Bode, einem Mitspieler, einem Objekt usw.). Das bedeutet in den meisten Fällen noch nicht, dass das Objekt gestorben ist. isDead, isAlive finde ich gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111106</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 26 Aug 2011 15:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 15:20:36 GMT]]></title><description><![CDATA[<p>Was ist der Vorteil von ptr_vector&lt;T&gt; gegenüber vector&lt;T*&gt;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111107</guid><dc:creator><![CDATA[destrict0r]]></dc:creator><pubDate>Fri, 26 Aug 2011 15:20:36 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 15:29:16 GMT]]></title><description><![CDATA[<p>Er ruft delete für dich auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111114</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 26 Aug 2011 15:29:16 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 15:30:52 GMT]]></title><description><![CDATA[<p>destrict0r schrieb:</p>
<blockquote>
<p>Was ist der Vorteil von ptr_vector&lt;T&gt; gegenüber vector&lt;T*&gt;?</p>
</blockquote>
<p>Automatische Aufräumung (kein <code>delete</code> notwendig), Exceptionsicherheit und direkte Dereferenzierung ( <code>*itr</code> ist <code>T&amp;</code> und nicht <code>T*</code> ).</p>
<p>Ausführlich sind die Vorteile <a href="http://www.boost.org/doc/libs/1_47_0/libs/ptr_container/doc/ptr_container.html#motivation" rel="nofollow">hier</a> aufgelistet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111115</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 26 Aug 2011 15:30:52 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 17:22:35 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Er ruft delete für dich auf.</p>
</blockquote>
<p>Wann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111145</guid><dc:creator><![CDATA[destrict0r]]></dc:creator><pubDate>Fri, 26 Aug 2011 17:22:35 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 17:26:58 GMT]]></title><description><![CDATA[<p>destrict0r schrieb:</p>
<blockquote>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Er ruft delete für dich auf.</p>
</blockquote>
<p>Wann?</p>
</blockquote>
<p>Sobald du das Objekt aus dem Container entfernst, mit <code>container.erase(iter)</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111148</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Fri, 26 Aug 2011 17:26:58 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Fri, 26 Aug 2011 17:29:49 GMT]]></title><description><![CDATA[<p>Zu beachten: Im Unterschied zu <code>std::vector&lt;T*&gt;</code> werden die Objekte aber kopiert, wenn du den Container kopierst! Oft will man das aber nicht. Um ungewolltes Kopieren zu vermeiden, kannst du deine Klasse T nicht-kopierbar machen, z.B. von boost::noncopyable erben lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111149</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Fri, 26 Aug 2011 17:29:49 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Sat, 27 Aug 2011 07:16:06 GMT]]></title><description><![CDATA[<p>fdfdg schrieb:</p>
<blockquote>
<p>Zu beachten: Im Unterschied zu <code>std::vector&lt;T*&gt;</code> werden die Objekte aber kopiert, wenn du den Container kopierst! Oft will man das aber nicht...</p>
</blockquote>
<p>Wobei man fairerweise sagen muss, das viele sich keine Gedanken über den Kopieraufwand machen - und das in beide Richtungen (Die einen die grundsätzlich alle Kopien vermeiden wollen, und dies auch an Stellen wo Kopien unproblematisch sind, als auch die, die Kopien auch dort einsetzen wo man massiv sparen könnte).</p>
<p>Bevor ich auf einen std::vector&lt;T*&gt; zurückgreife, würde ich zumindest die ptr-Container von Boost in betracht ziehen (Sofern der Container auch der Besitzer sein soll).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111274</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sat, 27 Aug 2011 07:16:06 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aus Memberfunktion aufrufen? on Sat, 27 Aug 2011 10:58:09 GMT]]></title><description><![CDATA[<p>fdfdg schrieb:</p>
<blockquote>
<p>Im Unterschied zu <code>std::vector&lt;T*&gt;</code> werden die Objekte aber kopiert, wenn du den Container kopierst! Oft will man das aber nicht.</p>
</blockquote>
<p>Noch viel weniger will man aber <code>std::vector&lt;T*&gt;</code> kopieren, falls die Zeiger besitzend sind. Nur kann man das nicht verhindern.</p>
<p>Aber der Hinweis mit <code>boost::noncopyable</code> ist gut, oft werden die Pointer-Container nämlich zur Speicherung von Objekten mit einer Identität (z.B. polymorph und ohne Wertsemantik) verwendet. Da könnte man immer noch Clone-Funktionen einsetzen, um Kopien ohne Kopierkonstruktor zu erstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111319</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 27 Aug 2011 10:58:09 GMT</pubDate></item></channel></rss>