<?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[Problem mit shared Pointern]]></title><description><![CDATA[<p>Ich habe eine Klasse Rabbit in dessen Konstruktor folgendes steht:</p>
<pre><code class="language-cpp">allRabbits.push_back(boost::shared_ptr&lt;Rabbit&gt;(this));
</code></pre>
<p>dabei ist allRabbits eine std::List und static member von Rabbit.</p>
<p>In der main() habe ich dann das stehen:</p>
<pre><code class="language-cpp">boost::shared_ptr&lt;Rabbit&gt; myRabbit(new Rabbit());
</code></pre>
<p>Und nach dem Beenden des Programms lande ich mit einer access violation in der checked_delete.hpp von boost.</p>
<p>Nach ein bischen überlegen ist mir aufgefallen, dass die beiden shared_ptr&lt;Rabbit&gt; voneinander nix wissen sollten, desshalb wird intern nicht richtig gezählt und das Objekt wird gelöscht und danach nochmal gelöscht(access violation). Stimmt das soweit?</p>
<p>Wenn ja wie löse ich das geschickt? Ich möchte quasi einen shared_ptr in der Main haben, auf dem 2 Referenzen(Main und allRabbits) sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297796/problem-mit-shared-pointern</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 06:45:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297796.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 06 Jan 2012 23:37:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit shared Pointern on Fri, 06 Jan 2012 23:37:58 GMT]]></title><description><![CDATA[<p>Ich habe eine Klasse Rabbit in dessen Konstruktor folgendes steht:</p>
<pre><code class="language-cpp">allRabbits.push_back(boost::shared_ptr&lt;Rabbit&gt;(this));
</code></pre>
<p>dabei ist allRabbits eine std::List und static member von Rabbit.</p>
<p>In der main() habe ich dann das stehen:</p>
<pre><code class="language-cpp">boost::shared_ptr&lt;Rabbit&gt; myRabbit(new Rabbit());
</code></pre>
<p>Und nach dem Beenden des Programms lande ich mit einer access violation in der checked_delete.hpp von boost.</p>
<p>Nach ein bischen überlegen ist mir aufgefallen, dass die beiden shared_ptr&lt;Rabbit&gt; voneinander nix wissen sollten, desshalb wird intern nicht richtig gezählt und das Objekt wird gelöscht und danach nochmal gelöscht(access violation). Stimmt das soweit?</p>
<p>Wenn ja wie löse ich das geschickt? Ich möchte quasi einen shared_ptr in der Main haben, auf dem 2 Referenzen(Main und allRabbits) sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164713</guid><dc:creator><![CDATA[JJ_]]></dc:creator><pubDate>Fri, 06 Jan 2012 23:37:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit shared Pointern on Fri, 06 Jan 2012 23:45:26 GMT]]></title><description><![CDATA[<p>Sich im Konstruktor einer Klasse irgendwo einzutragen halte ich für mehr als fragwürdig. Aber abgesehen davon solltest du dann auch rohe Pointer nutzen. Was ist denn wenn jemand einen Hasen auf dem Stack erstellt?</p>
<p>Edit: Am besten du beschreibst mal das gesamte Problem und was du erreichen möchtest, denn das da sieht so aus als sollte man das Design noch mal komplett überdenken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164715</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 06 Jan 2012 23:45:26 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit shared Pointern on Fri, 06 Jan 2012 23:56:50 GMT]]></title><description><![CDATA[<p>JJ_ schrieb:</p>
<blockquote>
<p>Nach ein bischen überlegen ist mir aufgefallen, dass die beiden shared_ptr&lt;Rabbit&gt; voneinander nix wissen sollten, desshalb wird intern nicht richtig gezählt und das Objekt wird gelöscht und danach nochmal gelöscht(access violation). Stimmt das soweit?</p>
</blockquote>
<p>Korrekt. Für Fälle wie diese gibt es enable_shared_from_this, shared_ptr wird damit effektiv zu einem intrusive_ptr, so dass shared_ptr mehrfach vom gleichen rohen Zeiger erzeugt werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164719</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 06 Jan 2012 23:56:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit shared Pointern on Sat, 07 Jan 2012 01:36:13 GMT]]></title><description><![CDATA[<p>Das ist glaube ich das, was ich gesucht habe, verstanden habe ich das aber nicht :/.<br />
Also ich weis nicht wie die Syntax dazu ausehen soll, damit ich das bekomme was ich möchte...</p>
<p>Ich erbe von enable_shared_from_this&lt;Rabbit&gt;... und dann?<br />
Wo verwende ich das shared_from_this()?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164721</guid><dc:creator><![CDATA[JJ_]]></dc:creator><pubDate>Sat, 07 Jan 2012 01:36:13 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit shared Pointern on Sat, 07 Jan 2012 02:07:37 GMT]]></title><description><![CDATA[<p>Kuck dir mal das Beispiel in der boost-Doku an:</p>
<p><a href="http://www.boost.org/doc/libs/1_48_0/libs/smart_ptr/enable_shared_from_this.html" rel="nofollow">http://www.boost.org/doc/libs/1_48_0/libs/smart_ptr/enable_shared_from_this.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164722</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sat, 07 Jan 2012 02:07:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit shared Pointern on Sat, 07 Jan 2012 12:09:38 GMT]]></title><description><![CDATA[<p>Möglicherweise entfällt die Notwendigkeit zu <code>enable_shared_from_this()</code> , wenn du dein Design ein wenig änderst. Ist es wirklich sinnvoll, dass <code>Rabbit</code>  <code>allRabbits</code> kennt? Wenn die Hasen nämlich autonom sind, kannst du den <code>shared_ptr</code> ausserhalb der Klasse in die Liste einfügen und musst gar nie mit <code>this</code> hantieren.</p>
<p>Ich selbst habe noch nie <code>enable_shared_from_this()</code> benötigt, obwohl ich inzwischen ab und zu mit <code>shared_ptr</code> arbeite.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164817</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 07 Jan 2012 12:09:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit shared Pointern on Sat, 07 Jan 2012 15:49:26 GMT]]></title><description><![CDATA[<p>@XPille Ja, die doku hab ich mir schon angesehen. Allerdings habe ich das Problem das ich bereits im Konstruktor von Rabbit den ersten shared_ptr anlege und ich nicht drauf komme wie ich nun <strong>automatisch</strong> in der main() den zweiten shared_ptr auf den ersten biegen kann.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a> Also Rabbit hat eine Member-Funktion Suicide(), welche - man kann es ahnen - den Hasen tötet. Mit dem ableben wird auch Rabbit aus allRabbits entfernt, deshalb hab ich mir gedacht es macht sinn das Rabbit allRabbits kennt.<br />
Wenn ich die Liste ausserhalb führen würde müsste ich jedesmal beim erstellen eines Hasen diesen manuell in die Liste einfügen und beim ableben(was evtl. ausserhalb des Sichtsbereich der Liste geschieht) diesen wieder manuell entfernen, wenn ich das versäume, dann hab ich Schrödingers Hasen ;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164908</guid><dc:creator><![CDATA[JJ_]]></dc:creator><pubDate>Sat, 07 Jan 2012 15:49:26 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit shared Pointern on Sat, 07 Jan 2012 16:14:57 GMT]]></title><description><![CDATA[<p>Ich habe es jetzt so geschrieben:</p>
<p>Rabbit.cpp</p>
<pre><code class="language-cpp">boost::shared_ptr&lt;Rabbit&gt; Rabbit::shared_ptr_from_RabbitList() {
		return shared_from_this();
	}
</code></pre>
<p>Main.cpp</p>
<pre><code class="language-cpp">boost::shared_ptr&lt;Rabbit&gt; myRabbit = (new Rabbit())-&gt;shared_ptr_from_RabbitList();
</code></pre>
<p>Das sieht aber merkwürdig aus und geht bestimmt besser...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2164916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2164916</guid><dc:creator><![CDATA[JJ_]]></dc:creator><pubDate>Sat, 07 Jan 2012 16:14:57 GMT</pubDate></item></channel></rss>