<?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[nullptrs in list]]></title><description><![CDATA[<pre><code class="language-cpp">class AnElement {
    void Oompa_Loompa_make_some_chokolate() { // wird automatisch aufgerufen.
        delete this;
    }
};

class AList {
    std::list&lt;std::shared_ptr&lt;AnElement&gt; &gt; elements_;

public:
    void add(std::shared_ptr&lt;AnElement&gt; element) {
        elements_.push_back(element);
    }
};
</code></pre>
<p>Nach einer Zeit wird 'elements_' sehr viele ungültige std::shared_ptr<sup>s</sup> enthalten.</p>
<p>Müsste ich bei jedem `add´ überprüfen ob `elements_´ nullptr<sup>s</sup> enthält?<br />
Oder gibt es da was spezielleres?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292299/nullptrs-in-list</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 03:38:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292299.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Sep 2011 18:37:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to nullptrs in list on Tue, 06 Sep 2011 18:37:49 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class AnElement {
    void Oompa_Loompa_make_some_chokolate() { // wird automatisch aufgerufen.
        delete this;
    }
};

class AList {
    std::list&lt;std::shared_ptr&lt;AnElement&gt; &gt; elements_;

public:
    void add(std::shared_ptr&lt;AnElement&gt; element) {
        elements_.push_back(element);
    }
};
</code></pre>
<p>Nach einer Zeit wird 'elements_' sehr viele ungültige std::shared_ptr<sup>s</sup> enthalten.</p>
<p>Müsste ich bei jedem `add´ überprüfen ob `elements_´ nullptr<sup>s</sup> enthält?<br />
Oder gibt es da was spezielleres?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2115856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2115856</guid><dc:creator><![CDATA[MeinNameIstVergeben]]></dc:creator><pubDate>Tue, 06 Sep 2011 18:37:49 GMT</pubDate></item><item><title><![CDATA[Reply to nullptrs in list on Tue, 06 Sep 2011 18:46:48 GMT]]></title><description><![CDATA[<p><code>delete this;</code> Bei shared_ptr gehaltenen Objekten ist böse. Dadurch, dass du das Ding einem shared_ptr übergeben hast, hast du dem shared_ptr die alleinige Herrschaft über Leben und Tod des Objektes gegeben. Ein <code>delete this</code> hintergeht diese Eigentumszusage. Der shared_ptr wirds dir mit einem bösen crash danken (Nämlich wenn der letzte shared_ptr das Objekt nochmal zerstören will).</p>
<p>Fazit: So gehts nicht. Was willst du erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2115857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2115857</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 06 Sep 2011 18:46:48 GMT</pubDate></item><item><title><![CDATA[Reply to nullptrs in list on Tue, 06 Sep 2011 18:53:58 GMT]]></title><description><![CDATA[<p>Stimmt. Habe daran nicht gedacht.<br />
Ich habe eine Liste, in der Liste sind Elemente drin, die nach einer Zeit ungültig werden (automatisch).</p>
<p>Nun dachte ich, dass man die Elemente &quot;automatisch&quot; aus der Liste löschen könnte, aber wahrscheinlich spricht der müde Mensch aus mir.</p>
<p>boost::pointer_container würde ja nur den Speicher am Ende des Scopes freigeben, wenn ich das richtig verstanden habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2115865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2115865</guid><dc:creator><![CDATA[MeinNameIstVergeben]]></dc:creator><pubDate>Tue, 06 Sep 2011 18:53:58 GMT</pubDate></item><item><title><![CDATA[Reply to nullptrs in list on Tue, 06 Sep 2011 19:10:37 GMT]]></title><description><![CDATA[<p>Wenn die Dinger sich selbst aus irgendeinem Container entfernen sollen, müssen sie einen Pointer oder eine Referenz auf den Container haben. Wie soll sonst der Container mitbekommen, dass sein Element das Zeitliche gesegnet hat.</p>
<p>Alternativ wäre vielleicht eine <code>bool isValid()</code> Methode für die Klasse sinnvoll und du räumst gelegentlich deinen Container auf (z.B. std::remove_if)</p>
<p>bei boost::pointer_container hast du das gleiche Problem wie der shared_ptr: pointer_container besitzen ihre Elemente.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2115868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2115868</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 06 Sep 2011 19:10:37 GMT</pubDate></item></channel></rss>