<?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[Speichermanagement]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hab meine Daten als Baumstruktur aufgebaut.<br />
Das funkt auch ganz gut.<br />
Die (temporären) Objekte, die ich zurückgebe sind in std::auto_ptr bzw.<br />
boost::shared_ptr gekapselt und garantieren mir daher die Zerstörung.<br />
Jetzt bin ich allerdings an einer Stelle angekommen, wo ich<br />
gerne einen Rat bezüglich des Speichermanagements hätte. Einem dieser<br />
Objekte sage ich: Erzeuge mir ein &quot;Kind&quot;. Dieses Kind hat allerdings einen<br />
Verweis zum Parent. Folglich brauche ich für das Kind auch immernoch das Parent.<br />
Jetzt hätte ich natürlich keinen Zugriff auf den boost::shared_ptr.<br />
Wie löse ich sowas am Besten? Reference-count im Objekt und den Destrukor<br />
private machen? Gibt es in Boost (oder so) evtl. schon eine derartige<br />
Basis-Klasse (ähnlich dem Cocoa NSObject)?<br />
Oder vielleicht nen zusätzlichen boost::weak_ptr ins Objekt, der mir den Zugriff<br />
auf den shared_ptr ermöglicht und die Zerstörung nicht verhindert?</p>
<p>Gruß,<br />
*Cpp-Anfänger</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/195377/speichermanagement</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 23:20:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/195377.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Oct 2007 08:00:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speichermanagement on Wed, 17 Oct 2007 08:03:26 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hab meine Daten als Baumstruktur aufgebaut.<br />
Das funkt auch ganz gut.<br />
Die (temporären) Objekte, die ich zurückgebe sind in std::auto_ptr bzw.<br />
boost::shared_ptr gekapselt und garantieren mir daher die Zerstörung.<br />
Jetzt bin ich allerdings an einer Stelle angekommen, wo ich<br />
gerne einen Rat bezüglich des Speichermanagements hätte. Einem dieser<br />
Objekte sage ich: Erzeuge mir ein &quot;Kind&quot;. Dieses Kind hat allerdings einen<br />
Verweis zum Parent. Folglich brauche ich für das Kind auch immernoch das Parent.<br />
Jetzt hätte ich natürlich keinen Zugriff auf den boost::shared_ptr.<br />
Wie löse ich sowas am Besten? Reference-count im Objekt und den Destrukor<br />
private machen? Gibt es in Boost (oder so) evtl. schon eine derartige<br />
Basis-Klasse (ähnlich dem Cocoa NSObject)?<br />
Oder vielleicht nen zusätzlichen boost::weak_ptr ins Objekt, der mir den Zugriff<br />
auf den shared_ptr ermöglicht und die Zerstörung nicht verhindert?</p>
<p>Gruß,<br />
*Cpp-Anfänger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386895</guid><dc:creator><![CDATA[*Cpp-Anfänger* 0]]></dc:creator><pubDate>Wed, 17 Oct 2007 08:03:26 GMT</pubDate></item><item><title><![CDATA[Reply to Speichermanagement on Wed, 17 Oct 2007 08:03:53 GMT]]></title><description><![CDATA[<p>HI,</p>
<p>ich bin jetzt kein shared_ptr-Experte, aber ist der nicht genau dafür gemacht ?<br />
Warum hält das Child nicht einfach einen shared_ptr auf den Parent ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386897</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 17 Oct 2007 08:03:53 GMT</pubDate></item><item><title><![CDATA[Reply to Speichermanagement on Wed, 17 Oct 2007 08:18:05 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Warum hält das Child nicht einfach einen shared_ptr auf den Parent ?</p>
</blockquote>
<p>Das einzige was der OP dabei beachten muss, ist das es keine Kreisverweise gibt die sich gegenseitig am Leben erhalten (dann kann man dies mittels boost::weak_ptr lösen, der zwar auf das gleiche Element wie ein entsprechender shared_ptr verweist, aber kein Speichermanagement übernimmt). Zudem sollte er Daten die mittels shared_ptr gehalten werden in der Regel auch so weitergeben (Dies ist ja gerade der Sinn, jede Kopie eines shared_ptr verweist auf das gleiche Objekt, das erst beim löschen des letzten shared_ptr gelöscht wird).</p>
<p>Zur Verwendung in die Boost-Dokumentation schauen, da existieren Beispiele (shared_ptr/weak_ptr und wie diese Zusammenhängen).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386910</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 17 Oct 2007 08:18:05 GMT</pubDate></item><item><title><![CDATA[Reply to Speichermanagement on Wed, 17 Oct 2007 08:24:12 GMT]]></title><description><![CDATA[<p>Danke für die Idee.</p>
<p>Ich bin auch kein shared_ptr-Experte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Wenn ich jetzt sage:<br />
Erzeuge mir das Objekt.</p>
<p>Dann kriege ich ja einen boost::shared_ptr zurück</p>
<pre><code class="language-cpp">boost::shared_ptr&lt;MyClass&gt; obj = ErzeugerDesParent.create();
</code></pre>
<p>Jetzt brauche ich das Kind von dem Objekt.</p>
<pre><code class="language-cpp">obj-&gt;createChild();
</code></pre>
<p>// In der Methode hab ich allerdings keinen Zugriff auf de shared_ptr <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ein neues shared_ptr-Objekt kann ich ja auch nicht machen, denn<br />
das reference counting findet ja in dem shared_ptr statt.</p>
<p>Gruß,<br />
*Cpp-Anfänger*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386913</guid><dc:creator><![CDATA[*Cpp-Anfänger* 0]]></dc:creator><pubDate>Wed, 17 Oct 2007 08:24:12 GMT</pubDate></item><item><title><![CDATA[Reply to Speichermanagement on Wed, 17 Oct 2007 08:29:38 GMT]]></title><description><![CDATA[<p>Hi asc,</p>
<p>an den weak_ptr hatte ich auch schon gedacht...<br />
Aber ich benötige in dem objekt ja &quot;eine Verknüpfung&quot; zu dem shared_ptr.<br />
Würdest du also in dem Objekt einen weak_ptr halten?</p>
<p>Gruß,<br />
*Cpp-Anfänger*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386918</guid><dc:creator><![CDATA[*Cpp-Anfänger* 0]]></dc:creator><pubDate>Wed, 17 Oct 2007 08:29:38 GMT</pubDate></item><item><title><![CDATA[Reply to Speichermanagement on Wed, 17 Oct 2007 09:22:11 GMT]]></title><description><![CDATA[<p><em>Cpp-Anfänger</em> schrieb:</p>
<blockquote>
<p>Erzeuge mir das Objekt.<br />
Dann kriege ich ja einen boost::shared_ptr zurück</p>
<pre><code class="language-cpp">boost::shared_ptr&lt;MyClass&gt; obj = ErzeugerDesParent.create();
</code></pre>
</blockquote>
<p>Soweit okay,</p>
<p><em>Cpp-Anfänger</em> schrieb:</p>
<blockquote>
<p>Jetzt brauche ich das Kind von dem Objekt.</p>
<pre><code class="language-cpp">obj-&gt;createChild();
</code></pre>
<p>// In der Methode hab ich allerdings keinen Zugriff auf de shared_ptr <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Nur hier solltest du dein Konzept überdenken. Denn entweder muss das Objekt den shared_ptr kennen (in dem Fall wohl nicht sinnvoll), oder du musst ihn übergeben...</p>
<p>Ich muss jetzt die Methodensignatur mal Raten:</p>
<pre><code class="language-cpp">// Vorher etwa so:
boost::shared_ptr&lt;MyClass&gt; ParentClass::createChild();

// Nun so:
boost::shared_ptr&lt;MyClass&gt; ParentClass::createChild(const boost::shared_ptr&lt;MyClass&gt;&amp; parent)
{
  this-&gt;Parent = parent; // Parent: Member vom Typ boost::shared_ptr&lt;MyClass&gt;
  ...
}
</code></pre>
<p><em>Cpp-Anfänger</em> schrieb:</p>
<blockquote>
<p>Ein neues shared_ptr-Objekt kann ich ja auch nicht machen, denn<br />
das reference counting findet ja in dem shared_ptr statt.</p>
</blockquote>
<p>Stimmt, ein Neues nicht, aber das alte musst du doch irgendwo halten und kannst dieses übergeben und einer Member zuweisen. Die Membervariable verweist dann auf das gleiche Objekt, und &quot;klingt sich bei dem übergebenen shared_ptr&quot; bei der Referenzzählung mit ein.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1386950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1386950</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 17 Oct 2007 09:22:11 GMT</pubDate></item><item><title><![CDATA[Reply to Speichermanagement on Wed, 17 Oct 2007 14:45:25 GMT]]></title><description><![CDATA[<p>ich glaube der OP sucht nach boost::enable_shared_from_this...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1387269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1387269</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 17 Oct 2007 14:45:25 GMT</pubDate></item><item><title><![CDATA[Reply to Speichermanagement on Wed, 17 Oct 2007 14:51:40 GMT]]></title><description><![CDATA[<p>Hi asc,</p>
<p>danke für deinen Vorschlag, es funktioniert auch prima,<br />
allerdings finde ich den Vorschlag von hustbaer design-technisch schöner.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>: Genau so etwas habe ich gesucht. Um das zu erreichen wollte ich schon<br />
nen boost::weak_ptr in mein Objekt packen, aber deine Lösung ist wirklich Opti.</p>
<p>Gruß,<br />
*Cpp-Anfänger*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1387278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1387278</guid><dc:creator><![CDATA[*Cpp-Anfänger* 0]]></dc:creator><pubDate>Wed, 17 Oct 2007 14:51:40 GMT</pubDate></item><item><title><![CDATA[Reply to Speichermanagement on Wed, 17 Oct 2007 15:28:12 GMT]]></title><description><![CDATA[<p>Einfach geil...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>: Du bist einfach genial!</p>
<p>Meine Idee mit dem weak_ptr war scheinbar gar nicht so schlecht,<br />
denn im Prinzip macht boost nichts anderes, nur dass dieser im Konstruktor von<br />
shared_ptr noch automatisch initialisiert wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Viele Grüße,<br />
*Cpp-Anfänger*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1387298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1387298</guid><dc:creator><![CDATA[*Cpp-Anfänger* 0]]></dc:creator><pubDate>Wed, 17 Oct 2007 15:28:12 GMT</pubDate></item></channel></rss>