<?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[Temporäre Variablen gekapselt in welchem boost_ptr?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe einige Funktionen, die temporäre Daten anlegen, welche vom Aufrufer genutzt werden sollen und dann automatisch gelöscht werden sollen. Klingt also nach einem perfekten Einsatz für einen smart_ptr.</p>
<p>Wie mache ich das jetzt geschickt? Ich könnte die Daten direkt in einem shared_ptr zurückgeben, aber shared_ptr sind teuer, richtig? Außerdem brauche ich das Objekt nur an einer Stelle: dort, wo der Aufrufer die Daten nutzt.</p>
<p>Alternative wäre, wenn ich nur einen normalen Pointer zurückliefere und der Benutzer sich selbst darum kümmern muss, dass delete aufgerufen wird bzw. er das in den Smartptr packt. Das finde ich aber nicht sehr programmier-freundlich, weil der Benutzer immer aufpassen muss...</p>
<p>Gibt es noch eine elegantere Lösung oder findet ihr einen shared_ptr dafür schon ok?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289545/temporäre-variablen-gekapselt-in-welchem-boost_ptr</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 02:58:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289545.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 Jul 2011 12:36:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 12:40:53 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe einige Funktionen, die temporäre Daten anlegen, welche vom Aufrufer genutzt werden sollen und dann automatisch gelöscht werden sollen. Klingt also nach einem perfekten Einsatz für einen smart_ptr.</p>
<p>Wie mache ich das jetzt geschickt? Ich könnte die Daten direkt in einem shared_ptr zurückgeben, aber shared_ptr sind teuer, richtig? Außerdem brauche ich das Objekt nur an einer Stelle: dort, wo der Aufrufer die Daten nutzt.</p>
<p>Alternative wäre, wenn ich nur einen normalen Pointer zurückliefere und der Benutzer sich selbst darum kümmern muss, dass delete aufgerufen wird bzw. er das in den Smartptr packt. Das finde ich aber nicht sehr programmier-freundlich, weil der Benutzer immer aufpassen muss...</p>
<p>Gibt es noch eine elegantere Lösung oder findet ihr einen shared_ptr dafür schon ok?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089899</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 07 Jul 2011 12:40:53 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 12:38:32 GMT]]></title><description><![CDATA[<p>Einen std::unique_ptr, falls du C++0x nutzt. <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/2089901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089901</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 07 Jul 2011 12:38:32 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 12:42:18 GMT]]></title><description><![CDATA[<p>Nutz ich schon, aber ich habe in dem Projekt gerade sowieso boost-ptr im Einsatz und irgendwie find ich C++0x-ptr mit boost-ptr mischen jetzt nicht sooo toll. Ich meine, wenn beides gleich gut klappt und ich schon boost-ptr nutze ist es doch für den Benutzer verwirrend, wenn ich hier boost-ptr und da 0x-ptr nutze...</p>
<p>Oder gibt es boost nichts für meine Zwecke?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089906</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 07 Jul 2011 12:42:18 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 13:00:04 GMT]]></title><description><![CDATA[<p>Ich würde auch <code>unique_ptr</code> benutzen. Damit machst du dem Aufrufer klar, dass das Objekt übertragen wird und immer nur einen Besitzer hat. Bei <code>shared_ptr</code> kann es grundsätzlich sein, dass sonst noch wer eine Referenz auf das Objekt hält und die Freigabe verhindert. Zudem fällt der ganze Overhead mit Reference Counting, Threadsicherheit, Custom Deleter etc. weg. Falls nötig kann ja der Benutzer selbst immer noch einen <code>shared_ptr</code> verwenden. In Zukunft wird Boost vielleicht sogar eine implizite Konvertierung anbieten, für den Fall, dass C++0x verwendet wird.</p>
<p>Siehe auch <a href="http://stackoverflow.com/questions/2953530/unique-ptr-boost-equivalent" rel="nofollow">hier</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089919</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 07 Jul 2011 13:00:04 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 13:02:50 GMT]]></title><description><![CDATA[<p>Die &quot;Kosten&quot; eines shared_ptr werden in meinen Augen überbewertet, es ist ja nicht so, dass du tausende davon erzeugst und wieder zerstörst (oder doch? Wie häufig ereignet sich der Fall, für den du das Objekt brauchst?). Wenn man weiß, dass man ein Problem performancekritisch lösen muss sollte man sich natürlich Gedanken über zusätzlichen Overhead machen, aber in 99% aller Fälle spielt der Overhead eines shread_ptr gegenüber einem unique_ptr nicht in´s Gewicht. Wenn du unique_ptr also nicht benutzen kannst oder willst spricht nichts gegen die Verwendung von shared_ptr, oder von mir aus auch einem temporären scoped_ptr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089921</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 07 Jul 2011 13:02:50 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 13:06:29 GMT]]></title><description><![CDATA[<p>Okay, aber dann wäre das der Verständlichkeit ja nicht so abträglich, da unique_ptr und shared_ptr offensichtlich andere Anwendungsbereiche haben.</p>
<p>Wie nutze ich denn scoped_ptr ohne das Problem, dass der Benutzer das selbstständig in einen scoper_ptr packen muss? Ich meine, Benutzer weiß erstmal nicht, dass er dafür verantwortlich ist das Zurückgegebene wieder zu löschen, daher wollte ich ja die direkte Ummantelung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089922</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 07 Jul 2011 13:06:29 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 13:15:36 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie nutze ich denn scoped_ptr ohne das Problem, dass der Benutzer das selbstständig in einen scoper_ptr packen muss? Ich meine, Benutzer weiß erstmal nicht, dass er dafür verantwortlich ist das Zurückgegebene wieder zu löschen, daher wollte ich ja die direkte Ummantelung.</p>
</blockquote>
<p>Bevor du dem Nutzer Speicherverwaltung aufbürdest, nimm lieber nen shared_ptr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089926</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 07 Jul 2011 13:15:36 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 13:46:26 GMT]]></title><description><![CDATA[<p>Wieso überhaupt dynamische Speicheranforderung und nicht eine normale Rückgabe, wenn das Ganze ohnehin vom Aufrufer direkt konsumiert werden soll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089945</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 07 Jul 2011 13:46:26 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 13:53:47 GMT]]></title><description><![CDATA[<p>Hm, gute Frage. Weil mir die Kopie zu teuer ist? Oder wird das mit 100%ger Sicherheit wegoptimiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089947</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 07 Jul 2011 13:53:47 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 14:08:36 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Hm, gute Frage. Weil mir die Kopie zu teuer ist? Oder wird das mit 100%ger Sicherheit wegoptimiert?</p>
</blockquote>
<p>Teure Kopien lassen sich oft durch Move-Semantiken lösen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2089953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089953</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 07 Jul 2011 14:08:36 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 14:16:05 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Hm, gute Frage. Weil mir die Kopie zu teuer ist? Oder wird das mit 100%ger Sicherheit wegoptimiert?</p>
</blockquote>
<p>Mit jedem hinreichend modernen Compiler: ja. Die Eliminierung von temporären Objekten ist immer möglich, bei benannten Objekten geht es immer dann, wenn bestimmte Voraussetzungen erfüllt sind:<br />
NRVO ist für ein bestimmtes benanntes Objekt dann möglich, wenn sich innerhalb des potentiellen Scopes dieses Objektes keine return-Anweisung findet, die nicht dieses Objekt zurückgibt. NRVO wird in der Regel für Funktionsparameter nicht unterstützt (abgesehen von inlining).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089955</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 07 Jul 2011 14:16:05 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 14:17:54 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Eisflamme schrieb:</p>
<blockquote>
<p>Hm, gute Frage. Weil mir die Kopie zu teuer ist? Oder wird das mit 100%ger Sicherheit wegoptimiert?</p>
</blockquote>
<p>Teure Kopien lassen sich oft durch Move-Semantiken lösen. <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>
</blockquote>
<p>Move ist in der Regel nur dann wesentlich billger als Kopieren, wenn das Objekt selbst nur Verweise auf Resourcen enthält, also im Prinzip nur (Smart-)pointer hält. Damit wären wir wieder am Ausgangspunkt der Diskussion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089957</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 07 Jul 2011 14:17:54 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 14:22:47 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Ethon schrieb:</p>
<blockquote>
<p>Eisflamme schrieb:</p>
<blockquote>
<p>Hm, gute Frage. Weil mir die Kopie zu teuer ist? Oder wird das mit 100%ger Sicherheit wegoptimiert?</p>
</blockquote>
<p>Teure Kopien lassen sich oft durch Move-Semantiken lösen. <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>
</blockquote>
<p>Move ist in der Regel nur dann wesentlich billger als Kopieren, wenn das Objekt selbst nur Verweise auf Resourcen enthält, also im Prinzip nur (Smart-)pointer hält. Damit wären wir wieder am Ausgangspunkt der Diskussion.</p>
</blockquote>
<p>Aber das ist in der Realität praktisch das einzige Szenario, bei dem Kopieren teuer ist.<br />
Meistens sind es doch Strings, Vektoren, Handles etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089960</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 07 Jul 2011 14:22:47 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäre Variablen gekapselt in welchem boost_ptr? on Thu, 07 Jul 2011 14:40:45 GMT]]></title><description><![CDATA[<p>Soweit ich weiß greift die Move-Semantik hier überhaupt nicht oder irre ich? Wenn NRVO aber immer klappt, ist das ok.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089976</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 07 Jul 2011 14:40:45 GMT</pubDate></item></channel></rss>