<?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[Funktion für Smart-Pointer mit Null-Deleter]]></title><description><![CDATA[<p>Ich schreibe eine Funktion</p>
<pre><code class="language-cpp">// Gibt shared_ptr auf r zurück, der kein delete ausführt
template &lt;typename Resource&gt;
std::tr1::shared_ptr&lt;Resource&gt; PassivePtr(Resource&amp; r)
{
    return std::tr1::shared_ptr&lt;Resource&gt;(&amp;r, NullDeleter());
}
</code></pre>
<p>die z.B. so angewandt wird:</p>
<pre><code class="language-cpp">void DoSomething(std::tr1::shared_ptr&lt;Image&gt; ptr);

Image image;
DoSomething( PassivePtr(image) ); // statt
DoSomething( std::tr1::shared_ptr&lt;Image&gt;(&amp;image, NullDeleter()) );
</code></pre>
<p>Nun drei kurze Fragen:</p>
<ol>
<li>Sowas gibts ja kaum fertig im TR1, oder? Ich habe nicht mal einen <code>null_deleter</code> gefunden... Gäbe es das in Boost?</li>
<li>Fällt euch ein besserer Name als &quot;PassivePtr&quot; ein? Wenn möglich nicht zu lange.</li>
<li>Sollte die Funktion <code>PassivePtr()</code> eher einen Zeiger als eine Referenz nehmen? Normalerweise implizieren bei mir Zeigerparameter zwar die Möglichkeit von <code>NULL</code> , aber andererseits würde dadurch die Nähe zum Smart-Pointer deutlicher...</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/topic/291155/funktion-für-smart-pointer-mit-null-deleter</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 20:33:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291155.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Aug 2011 20:21:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Thu, 11 Aug 2011 20:22:06 GMT]]></title><description><![CDATA[<p>Ich schreibe eine Funktion</p>
<pre><code class="language-cpp">// Gibt shared_ptr auf r zurück, der kein delete ausführt
template &lt;typename Resource&gt;
std::tr1::shared_ptr&lt;Resource&gt; PassivePtr(Resource&amp; r)
{
    return std::tr1::shared_ptr&lt;Resource&gt;(&amp;r, NullDeleter());
}
</code></pre>
<p>die z.B. so angewandt wird:</p>
<pre><code class="language-cpp">void DoSomething(std::tr1::shared_ptr&lt;Image&gt; ptr);

Image image;
DoSomething( PassivePtr(image) ); // statt
DoSomething( std::tr1::shared_ptr&lt;Image&gt;(&amp;image, NullDeleter()) );
</code></pre>
<p>Nun drei kurze Fragen:</p>
<ol>
<li>Sowas gibts ja kaum fertig im TR1, oder? Ich habe nicht mal einen <code>null_deleter</code> gefunden... Gäbe es das in Boost?</li>
<li>Fällt euch ein besserer Name als &quot;PassivePtr&quot; ein? Wenn möglich nicht zu lange.</li>
<li>Sollte die Funktion <code>PassivePtr()</code> eher einen Zeiger als eine Referenz nehmen? Normalerweise implizieren bei mir Zeigerparameter zwar die Möglichkeit von <code>NULL</code> , aber andererseits würde dadurch die Nähe zum Smart-Pointer deutlicher...</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/2105043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105043</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 11 Aug 2011 20:22:06 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Thu, 11 Aug 2011 20:27:15 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Fällt euch ein besserer Name als &quot;PassivePtr&quot; ein? Wenn möglich nicht zu lange.</p>
</blockquote>
<p>weak_ptr? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105047</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 11 Aug 2011 20:27:15 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Thu, 11 Aug 2011 20:48:04 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>weak_ptr? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Nein, ein Weak-Pointer ist eine schwache Referenz auf ein referenzgezähltes Objekt und wird bei dessen Zerstörung automatisch auf <code>NULL</code> gesetzt.</p>
<p>Mein zurückgegebener <code>shared_ptr</code> verhält sich hingegen wie ein roher Zeiger, der Aufrufer ist für die Gültigkeit verantwortlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105052</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 11 Aug 2011 20:48:04 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Thu, 11 Aug 2011 22:35:53 GMT]]></title><description><![CDATA[<p>ad 1) Ich hatte mal gesucht, aber nix gefunden. Hab' mir dann ein NoOperation Template geschrieben, das mit beliebigen Parametern aufrufbar ist, und einfach nix macht</p>
<p>ad 3) IMO ganz klar nen Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105095</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 11 Aug 2011 22:35:53 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Thu, 11 Aug 2011 22:47:53 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>ad 1) Ich hatte mal gesucht, aber nix gefunden. Hab' mir dann ein NoOperation Template geschrieben, das mit beliebigen Parametern aufrufbar ist, und einfach nix macht</p>
</blockquote>
<p>Was ist denn bei dir genau das <code>NoOperation</code> -Template – der <code>NullDeleter</code> ? Falls ja, verstehe ich das mit den beliebigen Parametern nicht ganz. Wann ruft man dessen <code>operator()</code> mit mehr als einem Parameter auf?</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>ad 3) IMO ganz klar nen Zeiger.</p>
</blockquote>
<p>Aus Neugier: Verwendest du normalerweise auch die Policy &quot;Zeigerparameter -&gt; NULL ist möglich, ansonsten Referenzen&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105105</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 11 Aug 2011 22:47:53 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Fri, 12 Aug 2011 17:02:17 GMT]]></title><description><![CDATA[<p>Hat niemand schon mal was Ähnliches benötigt und einen guten Namen parat? <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/2105487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105487</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 12 Aug 2011 17:02:17 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Fri, 12 Aug 2011 17:10:10 GMT]]></title><description><![CDATA[<p>Wozu brauchst du denn überhaupt einen Smart-Pointer, wenn der sich nicht selber um die Speicherverwaltung kümmern soll?</p>
<p>PS: Was hältst du von &quot;LazyPtr&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105490</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 12 Aug 2011 17:10:10 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Fri, 12 Aug 2011 17:23:22 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Wozu brauchst du denn überhaupt einen Smart-Pointer, wenn der sich nicht selber um die Speicherverwaltung kümmern soll?</p>
</blockquote>
<p>Für generische Schnittstellen. Ein paar Klassen von mir sollen z.B. <code>shared_ptr&lt;Image&gt;</code> abspeichern und sich so eine Image-Ressource teilen und wenn nötig automatisch freigeben. Allerdings kann es Fälle geben, in denen der Aufrufer für eine genügend lange Lebenszeit garantieren kann (z.B. <code>static</code> -Speicherklasse). <a href="http://www.c-plusplus.net/forum/288415" rel="nofollow">Hier</a> wurde mir aber gesagt, dass dafür ein Custom-Deleter okay sei <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>CStoll schrieb:</p>
<blockquote>
<p>PS: Was hältst du von &quot;LazyPtr&quot;?</p>
</blockquote>
<p>Hm, ist &quot;lazy&quot; in dem Zusammenhang ein verbreiteter Begriff? Ich weiss nicht, ob Leute die beschriebene Semantik damit assoziieren... Ich kenne diesen Ausdruck vor allem im Zusammenhang mit Lazy Evaluation in der funktionalen Programmierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105497</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 12 Aug 2011 17:23:22 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Fri, 12 Aug 2011 23:11:47 GMT]]></title><description><![CDATA[<p>nodelete_ptr ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105580</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 12 Aug 2011 23:11:47 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Sun, 14 Aug 2011 00:29:32 GMT]]></title><description><![CDATA[<p>&quot;NoDeletePtr&quot; wäre ebenfalls eine Möglichkeit. Ich habe auch schon an Begriffe wie &quot;unmanaged&quot; gedacht, aber das verwirrt wohl eher. Oder vielleicht doch etwas in Richtung &quot;NoOp&quot;, damit das Nichts-Tun betont wird. Gibts dafür vielleicht bessere Ausdrücke (mir fällt nur gerade &quot;idle&quot; ein, was hier aber nicht allzu gut passt). Doch wahrscheinlich ist ein Lesen der Dokumentation so oder so notwendig, um sich über die Funktionalität sicher zu sein...</p>
<p>Weitere Vorschläge sind gern gesehen! Auch was Punkt 3 (Referenzen vs. Zeiger) anbelangt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105860</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 14 Aug 2011 00:29:32 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Sun, 14 Aug 2011 00:38:03 GMT]]></title><description><![CDATA[<p>Also im eigentlichen Sinne ist ja derjenige, der von sich aus nix tut &quot;passiv&quot;. Von daher wäre aus dem Gesichtspunkt des &quot;NoOpPtr&quot; der &quot;PassivePtr&quot; nicht gar so abwegig. Als Programmierer allerdings, der sich von Pointer-Wrappern erwartet, dass sie irgendeine Form des Lebenszeit-Managements besitzen, wäre NullDeleterPtr wohl das ausdrucksstärkste. Da würde ich mich auch nicht darum kümmern, dass der Name eventuell zu lang ist oder sowas, irgendwie muss die Idee ja klar rüberkommen.<br />
Die Funktion &quot;wrapped&quot; einen Zeiger, ich finde, sie sollte auch einen Zeiger nehmen können, zumal man ansonsten nicht mehr mit null-zeigern hantieren könnter (was jetzt auch kein wirklicher Nachteil sein muss).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105861</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 14 Aug 2011 00:38:03 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Sun, 14 Aug 2011 01:14:05 GMT]]></title><description><![CDATA[<p>Hat was, danke!</p>
<p>Ich bin bisher davon ausgegangen, dass man die Funktion nicht für Nullzeiger nutzt, da sie so nichts bringt. Bei einem leeren Smart-Pointer ist es normalerweise irrelevant, wie der Deleter aussieht. Aber im Prinzip gibt es keinen triftigen Grund, der gegen die Übergabe von Nullzeigern spricht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105865</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 14 Aug 2011 01:14:05 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Sun, 14 Aug 2011 07:22:14 GMT]]></title><description><![CDATA[<p>SinnlosPtr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105883</guid><dc:creator><![CDATA[n]]></dc:creator><pubDate>Sun, 14 Aug 2011 07:22:14 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion für Smart-Pointer mit Null-Deleter on Mon, 15 Aug 2011 16:30:46 GMT]]></title><description><![CDATA[<p>soft_ptr<br />
unreal_ptr<br />
couch_potaoe_ptr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2106447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2106447</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 15 Aug 2011 16:30:46 GMT</pubDate></item></channel></rss>