<?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[Boost shared_ptr - Speichermanagement]]></title><description><![CDATA[<p>Hallo, ich verwende in einem Programm den Boost-Smartpointer shared_ptr.</p>
<p>Nach dem was ich bis jetzt gelesen habe verhält sich das mit dem Speichermanagement folgendermaßen:</p>
<p>Das referenzierte Objekt wird gelöscht, wenn (der letzte) shared_ptr auf dieses Objekt seine Gültigkeit verliert.</p>
<p>Also kann man zum Beispiel das referenzierte Objekt mit der reset() Methode löschen. Seh ich das bis jetzt richtig?</p>
<p>Wird das referenzierte Objekt auch gelöscht wenn die shared_ptr Variable (zum Beispiel am Ende einer Funktion) ihre Gültigkeit verliert? Oder gibt das ein Memory Leak.</p>
<p>Oder zum Beispiel wenn man shared_ptr in einem std::vector speichert und diesen mit clear() leert. Wird da alles durch den shared_ptr gelöscht oder muss ich da Hand anlegen?</p>
<p>Hoffe ihr könnt mir helfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/314735/boost-shared_ptr-speichermanagement</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 05:58:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314735.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 12 Mar 2013 11:20:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Boost shared_ptr - Speichermanagement on Tue, 12 Mar 2013 11:20:59 GMT]]></title><description><![CDATA[<p>Hallo, ich verwende in einem Programm den Boost-Smartpointer shared_ptr.</p>
<p>Nach dem was ich bis jetzt gelesen habe verhält sich das mit dem Speichermanagement folgendermaßen:</p>
<p>Das referenzierte Objekt wird gelöscht, wenn (der letzte) shared_ptr auf dieses Objekt seine Gültigkeit verliert.</p>
<p>Also kann man zum Beispiel das referenzierte Objekt mit der reset() Methode löschen. Seh ich das bis jetzt richtig?</p>
<p>Wird das referenzierte Objekt auch gelöscht wenn die shared_ptr Variable (zum Beispiel am Ende einer Funktion) ihre Gültigkeit verliert? Oder gibt das ein Memory Leak.</p>
<p>Oder zum Beispiel wenn man shared_ptr in einem std::vector speichert und diesen mit clear() leert. Wird da alles durch den shared_ptr gelöscht oder muss ich da Hand anlegen?</p>
<p>Hoffe ihr könnt mir helfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2306073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2306073</guid><dc:creator><![CDATA[Boost-Neuling]]></dc:creator><pubDate>Tue, 12 Mar 2013 11:20:59 GMT</pubDate></item><item><title><![CDATA[Reply to Boost shared_ptr - Speichermanagement on Tue, 12 Mar 2013 11:36:12 GMT]]></title><description><![CDATA[<p>Der shared_ptr macht das alles selbst. Es gibt ihn mittlerweile auch im Standard (std::shared_ptr&lt;&gt;). Mit reset kannst du noch ein bisschen eingreifen, aber falsch machen kannst du was Leaks angeht, fast nichts.</p>
<p>Was zu Problemen führen kann ist, wenn 2 shared_ptr sich gegenseitig referenzieren:</p>
<pre><code>class A
{
	std::shared_ptr&lt;B&gt; b;
};

class B
{
	std::shared_ptr&lt;A&gt; a;
};
</code></pre>
<p>Dann kann es passieren, dass sie sich gegenseitig &quot;hochschaukeln&quot; (also hochzählen) und obwohl es beide Instanzen nicht mehr geben sollte, sie sich gegenseitig am Leben halten. Um solche Zyklen aufzubrechen gibt es dann std::weak_ptr.</p>
<p>In den Artikeln hier im Forum gibt es einen schönen Bericht darüber.</p>
<p>Merke: shared_ptr verwaltet seine Ressourcen ganz alleine und ist dabei exceptionsicher. Der Vorteilg egenüber zum auto_ptr oder zum unique_ptr ist, dass er kopierbar ist und damit die Ressource für alle seine Kopien gleich verwaltet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2306079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2306079</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 12 Mar 2013 11:36:12 GMT</pubDate></item><item><title><![CDATA[Reply to Boost shared_ptr - Speichermanagement on Tue, 12 Mar 2013 12:04:13 GMT]]></title><description><![CDATA[<p>Okay. Dann kann man ja nicht viel falsch. Macht also nix, wenn shared_ptr auf etwas verweist und dann shared_ptr die Gültigkeit verliert.</p>
<p>Vielen Dank für die anschauliche Beschreibung.<br />
Hast mir sehr geholfen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2306089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2306089</guid><dc:creator><![CDATA[Boost-Neuling]]></dc:creator><pubDate>Tue, 12 Mar 2013 12:04:13 GMT</pubDate></item><item><title><![CDATA[Reply to Boost shared_ptr - Speichermanagement on Tue, 12 Mar 2013 13:09:43 GMT]]></title><description><![CDATA[<p>Kein Problem.</p>
<p>Denn genau dafür ist ja auch der shared_ptr da, bzw alle Smart-Pointer.<br />
Wobei man defaultmässig erstmal unique_ptr nehmen sollte und erst bei Bedarf auf shared_ptr umschwenken sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2306114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2306114</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 12 Mar 2013 13:09:43 GMT</pubDate></item></channel></rss>