<?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[leeren boost::shared_ptr zurück geben]]></title><description><![CDATA[<p>Ja wie mach ich das?<br />
Ich hab eine funktion welche shared_ptr in einen vector speichert und in einer anderen funktion geb ich halt die gespeicherten shared_ptr zurück, doch irgendwas muss ich ja auch zurück geben wenn der vector gerade mal leer ist. Wie kann ich also einen nicht referenzierten shared_ptr zurück geben, also einen der schlicht und einfach NULL ist.<br />
Bisher mache ich das so.</p>
<pre><code class="language-cpp">return boost::shared_ptr&lt;CBasicClientCommand&gt;();
</code></pre>
<p>nur habe ich nun gelesen das man eigentlich keine anonymen ptr verwenden soll, zumindest nicht in funktionsaufrufen weil es zu problemen führen könnte. Aber ist das hier nicht auch im grunde ein anonymer shared ptr?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193869/leeren-boost-shared_ptr-zurück-geben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 06:35:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193869.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Oct 2007 07:46:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to leeren boost::shared_ptr zurück geben on Mon, 01 Oct 2007 07:46:53 GMT]]></title><description><![CDATA[<p>Ja wie mach ich das?<br />
Ich hab eine funktion welche shared_ptr in einen vector speichert und in einer anderen funktion geb ich halt die gespeicherten shared_ptr zurück, doch irgendwas muss ich ja auch zurück geben wenn der vector gerade mal leer ist. Wie kann ich also einen nicht referenzierten shared_ptr zurück geben, also einen der schlicht und einfach NULL ist.<br />
Bisher mache ich das so.</p>
<pre><code class="language-cpp">return boost::shared_ptr&lt;CBasicClientCommand&gt;();
</code></pre>
<p>nur habe ich nun gelesen das man eigentlich keine anonymen ptr verwenden soll, zumindest nicht in funktionsaufrufen weil es zu problemen führen könnte. Aber ist das hier nicht auch im grunde ein anonymer shared ptr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375713</guid><dc:creator><![CDATA[Fedaykin]]></dc:creator><pubDate>Mon, 01 Oct 2007 07:46:53 GMT</pubDate></item><item><title><![CDATA[Reply to leeren boost::shared_ptr zurück geben on Mon, 01 Oct 2007 07:58:55 GMT]]></title><description><![CDATA[<p>Was spricht dagegen? (ich würde zwar noch das explizite NULL in die Parameterliste schreiben, aber ansonsten ist das OK: <code>return shared_ptr&lt;TYP&gt;(NULL);</code> )</p>
<p>Problematisch werden anonyme Zeiger afaik nur, wenn du mit nackten Pointern arbeitest - weil sich niemand dafür zuständig fühlt, sie wieder freizugeben. Mit Smart-Pointern löst sich das Problem ganz von alleine <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375723</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 01 Oct 2007 07:58:55 GMT</pubDate></item><item><title><![CDATA[Reply to leeren boost::shared_ptr zurück geben on Mon, 01 Oct 2007 08:13:05 GMT]]></title><description><![CDATA[<p>naja ich hab halt folgendes gelesen ich weiss nicht mehr genau woher aber ich quote mal hier rein</p>
<blockquote>
<p>Avoid using unnamed shared_ptr temporaries to save typing; to see why this is dangerous, consider this example:</p>
<p>void f(shared_ptr&lt;int&gt;, int);<br />
int g();</p>
<p>void ok()<br />
{<br />
shared_ptr&lt;int&gt; p(new int(2));<br />
f(p, g());<br />
}</p>
<p>void bad()<br />
{<br />
f(shared_ptr&lt;int&gt;(new int(2)), g());<br />
}</p>
<p>The function ok follows the guideline to the letter, whereas bad constructs the temporary shared_ptr in place, admitting the possibility of a memory leak. Since function arguments are evaluated in unspecified order, it is possible for new int(2) to be evaluated first, g() second, and we may never get to the shared_ptr constructor if g throws an exception. See Herb Sutter's treatment (also here) of the issue for more information.</p>
</blockquote>
<p>ok bei nochmaligen durchlesen versteh ichs nun naja bei NULL sollte es keine probleme geben. Hmm muss ich wohl weiter nach den eigentlichen problemen suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375726</guid><dc:creator><![CDATA[Fedaykin]]></dc:creator><pubDate>Mon, 01 Oct 2007 08:13:05 GMT</pubDate></item><item><title><![CDATA[Reply to leeren boost::shared_ptr zurück geben on Mon, 01 Oct 2007 08:10:44 GMT]]></title><description><![CDATA[<p>Achso, so meinst du das. Wie dir vielleicht aufgefallen ist, geht es in diesem Text um die Übergabe als Parameter und nicht um die Ergebnisrückgabe.</p>
<p>(und ich bin mir nichtmal sicher, ob so eine bunt gemischte Abarbeitung der Argumente überhaupt erlaubt ist - entweder wird erst der shared_ptr angelegt oder erst g() aufgerufen, mitten in der Ausführung zu unterbrechen macht wenig Sinn)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375729</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 01 Oct 2007 08:10:44 GMT</pubDate></item></channel></rss>