<?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[shared_pointer initalisierung mit NULL]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich versuche mir gerade smart pointer anzueignen und stehe vor folgendem Problem.</p>
<p>Normalerweise initialisiere ich die Klassenpointer beim erzeugen der Klasse mit Null. Vor der Nutzung frage ich ob sie != NULL sind.</p>
<p>Wie funktioniert es z. B. bei shared_ptr? Wenn ich</p>
<pre><code class="language-cpp">myClass:MyClass():mpMyPointer(NULL)
</code></pre>
<p>compiliere dann gibt es einen Fehler cannot convert from int to const shared...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289942/shared_pointer-initalisierung-mit-null</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 03:32:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289942.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Jul 2011 20:20:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Fri, 15 Jul 2011 20:20:51 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich versuche mir gerade smart pointer anzueignen und stehe vor folgendem Problem.</p>
<p>Normalerweise initialisiere ich die Klassenpointer beim erzeugen der Klasse mit Null. Vor der Nutzung frage ich ob sie != NULL sind.</p>
<p>Wie funktioniert es z. B. bei shared_ptr? Wenn ich</p>
<pre><code class="language-cpp">myClass:MyClass():mpMyPointer(NULL)
</code></pre>
<p>compiliere dann gibt es einen Fehler cannot convert from int to const shared...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093381</guid><dc:creator><![CDATA[notsmart]]></dc:creator><pubDate>Fri, 15 Jul 2011 20:20:51 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Fri, 15 Jul 2011 20:28:55 GMT]]></title><description><![CDATA[<p>Nimm einfach den Default-Ctor shared_ptr&lt;T&gt;();</p>
<p>Siehe: <a href="http://www.boost.org/doc/libs/1_47_0/libs/smart_ptr/shared_ptr.htm#constructors" rel="nofollow">http://www.boost.org/doc/libs/1_47_0/libs/smart_ptr/shared_ptr.htm#constructors</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093389</guid><dc:creator><![CDATA[smart_helper&amp;lt;T&amp;gt;]]></dc:creator><pubDate>Fri, 15 Jul 2011 20:28:55 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Fri, 15 Jul 2011 20:29:02 GMT]]></title><description><![CDATA[<p>lass den einfach so, der standardkonstruktor belegt den schon mit 0. und selbst wenn nicht, das interessiert dich nicht, da shared_ptr eh fehler wirft wenn du auf einen ungültigen zeiger zugreifen willst...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093390</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 15 Jul 2011 20:29:02 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Fri, 15 Jul 2011 20:30:47 GMT]]></title><description><![CDATA[<p>Super, danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093391</guid><dc:creator><![CDATA[notsmart]]></dc:creator><pubDate>Fri, 15 Jul 2011 20:30:47 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Fri, 15 Jul 2011 20:52:19 GMT]]></title><description><![CDATA[<p>Jetzt habe ich doch noch ein Problem:</p>
<p>Ich bekomme bei folgender Zuordnung</p>
<pre><code class="language-cpp">inline void eo::setro(const shared_ptr&lt;const ro&gt; &amp;rRO)
{
	mpRelOr = rRO;
}
</code></pre>
<p>eine Fehlermeldung die ich nicht nachvollziehen kann</p>
<pre><code>1&gt;error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const std::tr1::shared_ptr&lt;_Ty&gt;' (or there is no acceptable conversion)
1&gt;        with
1&gt;        [
1&gt;            _Ty=const ro
1&gt;        ]
1&gt;        ...\memory(1475): could be 'std::tr1::shared_ptr&lt;_Ty&gt; &amp;std::tr1::shared_ptr&lt;_Ty&gt;::operator =&lt;const ro&gt;(const std::tr1::shared_ptr&lt;_Ty&gt; &amp;)'
1&gt;        with
1&gt;        [
1&gt;            _Ty=const ro
1&gt;        ]
1&gt;        ...\memory(1468): or       'std::tr1::shared_ptr&lt;_Ty&gt; &amp;std::tr1::shared_ptr&lt;_Ty&gt;::operator =(const std::tr1::shared_ptr&lt;_Ty&gt; &amp;)'
1&gt;        with
1&gt;        [
1&gt;            _Ty=const ro
1&gt;        ]
1&gt;        while trying to match the argument list '(const std::tr1::shared_ptr&lt;_Ty&gt;, const std::tr1::shared_ptr&lt;_Ty&gt;)'
1&gt;        with
1&gt;        [
1&gt;            _Ty=const ro
1&gt;        ]
</code></pre>
<p>In der Klasse wurde ro wie folgt definiert:</p>
<pre><code class="language-cpp">const shared_ptr&lt;const ro&gt;
</code></pre>
<p>Ich möchte also einen const pointer auf ein const Objekt.</p>
<p>Was muss ich genau implementieren und wie sieht der Funktionsrumpf aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093408</guid><dc:creator><![CDATA[notsmart]]></dc:creator><pubDate>Fri, 15 Jul 2011 20:52:19 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Fri, 15 Jul 2011 20:59:22 GMT]]></title><description><![CDATA[<p>Wenn du dem Zeiger etwas zuweisen willst, mach</p>
<pre><code class="language-cpp">shared_ptr&lt;const ro&gt; mpRelOr;
</code></pre>
<p>daraus. Du kannst einer Konstante später nichts mehr zuweisen; das ist der Sinn einer Konstante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093415</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 15 Jul 2011 20:59:22 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Fri, 15 Jul 2011 21:00:52 GMT]]></title><description><![CDATA[<p>scheint als ob du mpRelOr folgendermassen definiert hast:</p>
<pre><code class="language-cpp">const shared_ptr&lt;const ro&gt; mpRelOr;
</code></pre>
<p>Dann hast du natürlich einen konstanten shared_ptr, und kannst ihm nicht einfach etwas zuweisen. Das sollte aber eigentlich klar sein oder nicht? Du musst mpRelOr bei der Definition auch gleich initialisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093416</guid><dc:creator><![CDATA[notLoggedIn]]></dc:creator><pubDate>Fri, 15 Jul 2011 21:00:52 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Fri, 15 Jul 2011 21:01:31 GMT]]></title><description><![CDATA[<p>notsmart schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Hat sich erledigt. Ich bin doof und wollte ein <code>const</code> Objekt beschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093417</guid><dc:creator><![CDATA[notsmart]]></dc:creator><pubDate>Fri, 15 Jul 2011 21:01:31 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Fri, 15 Jul 2011 21:02:26 GMT]]></title><description><![CDATA[<p>Danke nochmal für die Hinweise..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093420</guid><dc:creator><![CDATA[notsmart]]></dc:creator><pubDate>Fri, 15 Jul 2011 21:02:26 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Fri, 15 Jul 2011 21:02:47 GMT]]></title><description><![CDATA[<p>Außerdem solltest du (außer es gibt einen sinnvollen Grund) die Smart-Pointer per value übergeben. Die Referenzzählung garantiert, dass der Pointer immer gültig ist, und das geht nur, wenn du die Kopiersemantik nutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093421</guid><dc:creator><![CDATA[Jodocus]]></dc:creator><pubDate>Fri, 15 Jul 2011 21:02:47 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Fri, 15 Jul 2011 22:05:50 GMT]]></title><description><![CDATA[<p>Jodocus schrieb:</p>
<blockquote>
<p>Außerdem solltest du (außer es gibt einen sinnvollen Grund) die Smart-Pointer per value übergeben. Die Referenzzählung garantiert, dass der Pointer immer gültig ist, und das geht nur, wenn du die Kopiersemantik nutzt.</p>
</blockquote>
<p>Ist das wirklich so?</p>
<p>Ich meine nämlich das hier vorher gefunden zu haben:</p>
<p><a href="http://www.c-plusplus.net/forum/174283" rel="nofollow">http://www.c-plusplus.net/forum/174283</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093433</guid><dc:creator><![CDATA[notsmart]]></dc:creator><pubDate>Fri, 15 Jul 2011 22:05:50 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Sat, 16 Jul 2011 01:18:57 GMT]]></title><description><![CDATA[<p>Jodocus schrieb:</p>
<blockquote>
<p>Außerdem solltest du (außer es gibt einen sinnvollen Grund) die Smart-Pointer per value übergeben. Die Referenzzählung garantiert, dass der Pointer immer gültig ist, und das geht nur, wenn du die Kopiersemantik nutzt.</p>
</blockquote>
<p>Ganz viel AUA!</p>
<p>shared_ptr bitte niemals nicht by-value übergeben, denn das kostet schnell mal ein paar hundert Cycles (shared_ptr muss seinen Counter threadsafe updaten, und das ist teuer).</p>
<p>Und was die Referenzzählung angeht, das funktioniert natürlich wunderbar. Referenzen auf shared_ptr als Member abzuspeichern wäre böse. Als Parameter aber bitte immer per reference-to-const.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093475</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 16 Jul 2011 01:18:57 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Sat, 16 Jul 2011 01:25:24 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>lass den einfach so, der standardkonstruktor belegt den schon mit 0. und selbst wenn nicht, das interessiert dich nicht, da shared_ptr eh fehler wirft wenn du auf einen ungültigen zeiger zugreifen willst...</p>
</blockquote>
<p>Auch ganz viel AUA!</p>
<p>Der operator -&gt; von shared_ptr ist &quot;unchecked&quot;. D.h. der wirft gar nix wenn man einen ungültigen Zeiger dereferenziert, das Programm wird das selbe machen wie bei einem rohen Zeiger.</p>
<p>§ 20.9.11.2.5 schrieb:</p>
<blockquote>
<p>T* operator-&gt;() const;</p>
<p>Requires: get() != 0.<br />
Returns: get().<br />
Throws: nothing.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2093477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093477</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 16 Jul 2011 01:25:24 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Sat, 16 Jul 2011 06:31:26 GMT]]></title><description><![CDATA[<p>Und wie löst man jetzt dass Problem dass man ihn irgendwie NULL referenziert und dann immer wieder abfragt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093493</guid><dc:creator><![CDATA[notsmart]]></dc:creator><pubDate>Sat, 16 Jul 2011 06:31:26 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Sat, 16 Jul 2011 09:23:41 GMT]]></title><description><![CDATA[<p>Erstens referenziert ein Zeiger nicht, er zeigt. Zweitens, indem man ihn nicht 0 zeigern lässt? Wozu sollte man einen shared_ptr wollen, wenn der dann eh auf nichts zeigt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093536</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 16 Jul 2011 09:23:41 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Sat, 16 Jul 2011 09:31:14 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Erstens referenziert ein Zeiger nicht, er zeigt.</p>
</blockquote>
<p>Wenn man zwanghaft klugscheißen will, sollte man wenigstens recht haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093542</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 16 Jul 2011 09:31:14 GMT</pubDate></item><item><title><![CDATA[Reply to shared_pointer initalisierung mit NULL on Sat, 16 Jul 2011 17:19:32 GMT]]></title><description><![CDATA[<p>notsmart schrieb:</p>
<blockquote>
<p>Und wie löst man jetzt dass Problem dass man ihn irgendwie NULL referenziert und dann immer wieder abfragt?</p>
</blockquote>
<p>So wie man es in sämtlichen Beispielen sieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093662</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 16 Jul 2011 17:19:32 GMT</pubDate></item></channel></rss>