<?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[Testen ob shared_ptr gültig ist]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe diesen Code:</p>
<pre><code class="language-cpp">std::shared_ptr&lt;SysHandle&gt; s = getSysHandle();

// Wie kann ich hier prüfen ob s gültig ist (also kein &quot;NULL Shared ptr ist&quot;?

if(s.get() != NULL) // Ist das korrekt?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/297394/testen-ob-shared_ptr-gültig-ist</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 11:03:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297394.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 26 Dec 2011 22:11:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Mon, 26 Dec 2011 22:11:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe diesen Code:</p>
<pre><code class="language-cpp">std::shared_ptr&lt;SysHandle&gt; s = getSysHandle();

// Wie kann ich hier prüfen ob s gültig ist (also kein &quot;NULL Shared ptr ist&quot;?

if(s.get() != NULL) // Ist das korrekt?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2161165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161165</guid><dc:creator><![CDATA[ZeigerFrage3]]></dc:creator><pubDate>Mon, 26 Dec 2011 22:11:09 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Mon, 26 Dec 2011 22:14:19 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if(s)
</code></pre>
<p>Warum denken Anfänger eigentlich immer so kompliziert? ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161166</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 26 Dec 2011 22:14:19 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Mon, 26 Dec 2011 22:28:14 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if(s)
</code></pre>
<p>Warum denken Anfänger eigentlich immer so kompliziert? ...</p>
</blockquote>
<p>Deine Aussage ist unqualifiziert. Überleg doch mal etwas weiter als nur von 12 bis Mittags. Vielleicht kennen Anfänger noch nicht jede Überladung einer jenen Klasse <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/2161172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161172</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 26 Dec 2011 22:28:14 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Mon, 26 Dec 2011 22:30:02 GMT]]></title><description><![CDATA[<p>Fällt mir nur allgemein so auf. Solche Probleme hatte ich noch nie. Ich käme auch nie auf die Idee, einen rohen Zeiger mit NULL zu vergleichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161173</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 26 Dec 2011 22:30:02 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Mon, 26 Dec 2011 22:35:02 GMT]]></title><description><![CDATA[<p>Stimmt warum auch, ist ja nicht so das es der Standard weg ist <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/2161176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161176</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 26 Dec 2011 22:35:02 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Mon, 26 Dec 2011 22:45:45 GMT]]></title><description><![CDATA[<p>314159265358979 ist ein echtes Problemkind</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161178</guid><dc:creator><![CDATA[schnucky]]></dc:creator><pubDate>Mon, 26 Dec 2011 22:45:45 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Tue, 27 Dec 2011 00:12:19 GMT]]></title><description><![CDATA[<p>*schnucki</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161182</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 27 Dec 2011 00:12:19 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Tue, 27 Dec 2011 00:39:36 GMT]]></title><description><![CDATA[<p>ZeigerFrage3 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::shared_ptr&lt;SysHandle&gt; s = getSysHandle();

// Wie kann ich hier prüfen ob s gültig ist (also kein &quot;NULL Shared ptr ist&quot;?

if(s.get() != NULL) // Ist das korrekt?
</code></pre>
</blockquote>
<p>Ja, ist korrekt, wenn auch unnötig kompliziert.<br />
Wobei NULL ein C-ismus ist, in C++ verwende ich persönlich einfach 0.</p>
<p>Die einfachere Variante hat 314 ja schon gepostet.</p>
<p>Der Vollständigkeit halber: es ginge dann noch</p>
<pre><code class="language-cpp">std::shared_ptr&lt;SysHandle&gt; s = getSysHandle();

if (s != std::shared_ptr&lt;SysHandle&gt;()) // auch korrekt, auch unnötig kompliziert
</code></pre>
<p>Und wenn du den shared_ptr nur innerhalb des &quot;if&quot; brauchst, kannst du es auch gleich so schreiben:</p>
<pre><code class="language-cpp">if (std::shared_ptr&lt;SysHandle&gt; s = getSysHandle())
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2161183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161183</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 27 Dec 2011 00:39:36 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Tue, 27 Dec 2011 00:48:53 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Und wenn du den shared_ptr nur innerhalb des &quot;if&quot; brauchst, kannst du es auch gleich so schreiben:</p>
<pre><code class="language-cpp">if (std::shared_ptr&lt;SysHandle&gt; s = getSysHandle())
</code></pre>
</blockquote>
<p>Hey, darauf bin ich gar nicht gekommen. Wäre auch die von mir favorisierte Variante, da so der Scope am kleinsten gehalten wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161186</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 27 Dec 2011 00:48:53 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Tue, 27 Dec 2011 00:50:25 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Und wenn du den shared_ptr nur innerhalb des &quot;if&quot; brauchst, kannst du es auch gleich so schreiben:</p>
<pre><code class="language-cpp">if (std::shared_ptr&lt;SysHandle&gt; s = getSysHandle())
</code></pre>
</blockquote>
<p>Hey, darauf bin ich gar nicht gekommen. Wäre auch die von mir favorisierte Variante, da so der Scope am kleinsten gehalten wird.</p>
</blockquote>
<p>dann könnte man auch gleich<br />
<code>if(getSysHandle() != nullptr)</code> schreiben?!</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161188</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 27 Dec 2011 00:50:25 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Tue, 27 Dec 2011 00:52:09 GMT]]></title><description><![CDATA[<p>Dann hast du ja die Variable nicht mehr. <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/2161189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161189</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 27 Dec 2011 00:52:09 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Tue, 27 Dec 2011 01:04:10 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16305">@unskilled</a></p>
<pre><code class="language-cpp">if (shared_ptr&lt;foo&gt; f = gib_foo())
    f-&gt;mach_was();
</code></pre>
<p><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>
<p>EDIT: Man kann auch (abstruse) Beispiele finden, wo es sogar ohne Verwendung der shared_ptr Variable nötig ist diese zu erstellen. z.B.:</p>
<pre><code class="language-cpp">if (shared_ptr&lt;void&gt; l = lock_the_mighty_lock())
    do_something_that_requires_the_mighty_lock_to_be_locked();
</code></pre>
<p>unique_ptr wäre hier vermutlich passender. Bzw. wenn ich mich nicht irre ist sogar unique_lock movable, könnte also auch direkt als Returnwert verwendet werden.<br />
Und mit unique_lock als Returntyp fände ich das nicht mal mehr so abstrus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161190</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 27 Dec 2011 01:04:10 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Tue, 27 Dec 2011 00:57:43 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16305">@unskilled</a></p>
<pre><code class="language-cpp">if (shared_ptr&lt;foo&gt; f = gib_foo())
    f-&gt;mach_was();
</code></pre>
<p><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>
</blockquote>
<p>ok, das wusste ich nicht.<br />
aber dann kann man auch scoped_ptr nehmen - und so gar nen rohen pointer...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161192</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 27 Dec 2011 00:57:43 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Tue, 27 Dec 2011 01:07:52 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16305">@unskilled</a><br />
Siehe EDIT oben.</p>
<p>Wenn die Funktion nen shared_ptr zurückgibt, kannst du keinen scoped_ptr/unique_ptr verwenden. (Es sei denn du kannst die Funktion ändern, und es wird nirgends im Programm ein shared_ptr für das erzeugte Objekt benötigt.)</p>
<p>Und wenn die Funktion z.B. ein neues Objekt erstellt, dann kannst du auch keinen rohen Zeiger verwenden.<br />
Da der zurückgegebene Zeiger ja trotzdem ein shared_ptr ist, und dieser, da er nirgends kopiert wird, das erzeugte Objekt gleich wieder zerstört.</p>
<p>Also das</p>
<pre><code class="language-cpp">if (foo* f = create_temporary_foo().get())
    f-&gt;mach_was(); // BOOM!
</code></pre>
<p>wäre keine gute Idee, da das Objekt vor dem &quot;mach was&quot; bereits wieder zerstört wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161193</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 27 Dec 2011 01:07:52 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Tue, 27 Dec 2011 01:08:00 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>aber dann kann man auch scoped_ptr nehmen</p>
</blockquote>
<p>Nur, wenn <code>gib_foo()</code> den Besitz transferiert, wobei man dann besser <code>unique_ptr</code> nimmt. Üblicher ist bei dieser Verwendung aber, dass man die <code>shared_ptr</code> -Variable erstellt und damit temporär die Lebenszeit des Objekts aufrechterhält.</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>und so gar nen rohen pointer...</p>
</blockquote>
<p>Und zusätzlich Code sowie Exception<strong>un</strong>sicherheit, oder wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161194</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 27 Dec 2011 01:08:00 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Tue, 27 Dec 2011 01:43:57 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>und so gar nen rohen pointer...</p>
</blockquote>
<p>Und zusätzlich Code sowie Exception<strong>un</strong>sicherheit, oder wie?</p>
</blockquote>
<p>welchen vorteil hat denn der smart pointer in diesem fall?<br />
ist ein delete auf den pointer überhaupt definiert, den wir so bekommen? oder muss man den pointer eh über freeSysPointer() oder ähnliches freigeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161197</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 27 Dec 2011 01:43:57 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Tue, 27 Dec 2011 02:00:16 GMT]]></title><description><![CDATA[<p>Hast du überhaupt verstanden, was ein Smartpointer ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161198</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 27 Dec 2011 02:00:16 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Tue, 27 Dec 2011 02:15:42 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>und so gar nen rohen pointer...</p>
</blockquote>
<p>Und zusätzlich Code sowie Exception<strong>un</strong>sicherheit, oder wie?</p>
</blockquote>
<p>welchen vorteil hat denn der smart pointer in diesem fall?<br />
ist ein delete auf den pointer überhaupt definiert, den wir so bekommen? oder muss man den pointer eh über freeSysPointer() oder ähnliches freigeben?</p>
</blockquote>
<p>Wenn dir eine Funktion einen Smart-Pointer gibt, kannst du davon ausgehen, dass der Pointer smart genug ist, das Objekt korrekt freizugeben.<br />
Wie auch immer die Freigabe auszusehen hat. Das weiss dann der Pointer, du musst dir darüber keine Gedanken mehr machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161200</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 27 Dec 2011 02:15:42 GMT</pubDate></item><item><title><![CDATA[Reply to Testen ob shared_ptr gültig ist on Tue, 27 Dec 2011 02:52:28 GMT]]></title><description><![CDATA[<p>ok, war davon ausgegangen, dass getSysHandle eine C-API-Funktion ist und der shared_ptr dort erst aus einem normalen pointer konstruiert wird - aber hat sich so und so erledigt, da der ctor ja eh explicit ist und somit die zeile des TE gar nicht kompilieren würde, wenn meine annahme richtig wäre... sry^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2161204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2161204</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 27 Dec 2011 02:52:28 GMT</pubDate></item></channel></rss>