<?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[Fragen zu boost smart pointern]]></title><description><![CDATA[<p>Auf der Seite <a href="http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/sp_techniques.html" rel="nofollow">http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/sp_techniques.html</a><br />
bin ich auf ein paar Dinge gestoßen die ich nicht verstehen.</p>
<p>1. Im 'pimpl idiom' Beispiel: Wo wird da der pointer erstellt? Ich kann nirgentwo ein pimp_(new file::impl) finden. Und ganz grundsätzlich - warum nimmt man hierfür keinen scoped pointer?</p>
<p>2. Warum soll es nicht möglich sein einen shared_ptr von einem raw pointer zu erstellen? Wenn ich einen shared pointer initialisiere dann übergebe ich ja auch bei &quot;new &quot; einen raw-pointer.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/265114/fragen-zu-boost-smart-pointern</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 10:05:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265114.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Apr 2010 12:41:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fragen zu boost smart pointern on Sun, 18 Apr 2010 12:41:39 GMT]]></title><description><![CDATA[<p>Auf der Seite <a href="http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/sp_techniques.html" rel="nofollow">http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/sp_techniques.html</a><br />
bin ich auf ein paar Dinge gestoßen die ich nicht verstehen.</p>
<p>1. Im 'pimpl idiom' Beispiel: Wo wird da der pointer erstellt? Ich kann nirgentwo ein pimp_(new file::impl) finden. Und ganz grundsätzlich - warum nimmt man hierfür keinen scoped pointer?</p>
<p>2. Warum soll es nicht möglich sein einen shared_ptr von einem raw pointer zu erstellen? Wenn ich einen shared pointer initialisiere dann übergebe ich ja auch bei &quot;new &quot; einen raw-pointer.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1884593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1884593</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Sun, 18 Apr 2010 12:41:39 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu boost smart pointern on Sun, 18 Apr 2010 12:48:34 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>1. Im 'pimpl idiom' Beispiel: Wo wird da der pointer erstellt? Ich kann nirgentwo ein pimp_(new file::impl) finden. Und ganz grundsätzlich - warum nimmt man hierfür keinen scoped pointer?</p>
</blockquote>
<p>Hier:</p>
<pre><code class="language-cpp">file::file(char const * name, char const * mode): pimpl_(new impl(name, mode))
</code></pre>
<p>Natuerlich kann man auch einen scoped_ptr nehmen, der ist meistens sinnvoller. nur in dem Beispiel geht es um Files und ein File ist nicht kopierbar. Deshalb wird shared_ptr verwendet um Kopien erstellen zu koennen (die intern den selben pimpl verwenden). Ob das sinnvoll ist sei dahin gestellt - es ist nur ein Beispiel.</p>
<blockquote>
<p>2. Warum soll es nicht möglich sein einen shared_ptr von einem raw pointer zu erstellen? Wenn ich einen shared pointer initialisiere dann übergebe ich ja auch bei &quot;new &quot; einen raw-pointer.</p>
</blockquote>
<p>Wo steht das denn?</p>
<p>Bei raw Pointern muss man nur aufpassen, denn der shared_ptr uebernimmt Ownership. dh, der shared_ptr macht irgendwann ein delete auf den Zeiger - wenn man darauf aber achtet gibt es kein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1884595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1884595</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 18 Apr 2010 12:48:34 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu boost smart pointern on Sun, 18 Apr 2010 12:55:02 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>1. Im 'pimpl idiom' Beispiel: Wo wird da der pointer erstellt? Ich kann nirgentwo ein pimp_(new file::impl) finden.</p>
</blockquote>
<p>Doch, im Konstruktor:</p>
<pre><code class="language-cpp">file::file(char const * name, char const * mode): pimpl_(new impl(name, mode))
{
}
</code></pre>
<p>pospiech schrieb:</p>
<blockquote>
<p>Und ganz grundsätzlich - warum nimmt man hierfür keinen scoped pointer?</p>
</blockquote>
<p>Sie wollen <code>file</code> kopier- und zuweisbar lassen, was mit <code>scoped_ptr</code> nicht geht. So kann man <code>file</code> -Objekte in Containern speichern. Für Pimpl scheint mir <code>scoped_ptr</code> aber oft sinnvoller, schliesslich möchte man nicht immer geteilte Besitz-Semantik.</p>
<p>pospiech schrieb:</p>
<blockquote>
<p>2. Warum soll es nicht möglich sein einen shared_ptr von einem raw pointer zu erstellen?</p>
</blockquote>
<p>Es ist schon möglich, aber mehr als einmal nicht sinnvoll.</p>
<pre><code class="language-cpp">{
    T* raw_ptr = new T();
    shared_ptr&lt;T&gt; smart_ptr1(raw_ptr);
    shared_ptr&lt;T&gt; smart_ptr2(raw_ptr);
} // Zerstörung von smart_ptr2, delete raw_ptr
  // Zerstörung von smart_ptr1, delete raw_ptr -&gt; WAMM
</code></pre>
<p><em>Edit: Ich war ja wieder mal extrem langsam...</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1884601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1884601</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 18 Apr 2010 12:55:02 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu boost smart pointern on Sun, 18 Apr 2010 12:55:29 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>1. Im 'pimpl idiom' Beispiel: Wo wird da der pointer erstellt? Ich kann nirgentwo ein pimp_(new file::impl) finden. Und ganz grundsätzlich - warum nimmt man hierfür keinen scoped pointer?</p>
</blockquote>
<p>Der Pointer wird in der Initialisierungsliste erstellt:</p>
<pre><code class="language-cpp">file::file(char const * name, char const * mode): pimpl_(new impl(name, mode))
</code></pre>
<p>pospiech schrieb:</p>
<blockquote>
<p>2. Warum soll es nicht möglich sein einen shared_ptr von einem raw pointer zu erstellen? Wenn ich einen shared pointer initialisiere dann übergebe ich ja auch bei &quot;new &quot; einen raw-pointer.</p>
</blockquote>
<p>Du meinst <a href="http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/sp_techniques.html#from_raw" rel="nofollow">http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/sp_techniques.html#from_raw</a>? Weil p bei Beenden der Funktion automatisch freigegeben würde. Das ist aber oft nicht Sinn der Sache.</p>
<p>EDIT: viel zu spät...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1884603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1884603</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sun, 18 Apr 2010 12:55:29 GMT</pubDate></item></channel></rss>