<?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 visual studio]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe noch nie shared pointer verwendet: ist es korrekt dass ich diese wie normale pointer benutze und davon ausgehen kann dass der heap selbst freigegeben wird? Also muss ich nichts mehr mit delete machen?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/330621/shared-pointer-visual-studio</link><generator>RSS for Node</generator><lastBuildDate>Thu, 02 Jul 2026 23:48:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330621.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 19 Jan 2015 09:33:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 09:33:24 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe noch nie shared pointer verwendet: ist es korrekt dass ich diese wie normale pointer benutze und davon ausgehen kann dass der heap selbst freigegeben wird? Also muss ich nichts mehr mit delete machen?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438342</guid><dc:creator><![CDATA[babmo]]></dc:creator><pubDate>Mon, 19 Jan 2015 09:33:24 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 09:35:05 GMT]]></title><description><![CDATA[<p>Du meinst std::unique_ptr? Ja, der ist wie ein normaler Pointer mit automatischem delete.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438343</guid><dc:creator><![CDATA[unique_toll]]></dc:creator><pubDate>Mon, 19 Jan 2015 09:35:05 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 09:37:16 GMT]]></title><description><![CDATA[<p>babmo schrieb:</p>
<blockquote>
<p>ich habe noch nie shared pointer verwendet: ist es korrekt dass ich diese wie normale pointer benutze</p>
</blockquote>
<p>Nein, nicht genauso. Man sollte z.B. keinen shared_ptr an eine Funktion übergeben, wenn der Pointer nur für den Funktionsaufruf benötigt wird. Dafür gibt es die get-Funktion.</p>
<blockquote>
<p>und davon ausgehen kann dass der heap selbst freigegeben wird? Also muss ich nichts mehr mit delete machen?</p>
</blockquote>
<p>Ja</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438344</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 19 Jan 2015 09:37:16 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 10:07:02 GMT]]></title><description><![CDATA[<blockquote>
<p>Nein, nicht genauso. Man sollte z.B. keinen shared_ptr an eine Funktion übergeben, wenn der Pointer nur für den Funktionsaufruf benötigt wird. Dafür gibt es die get-Funktion.</p>
</blockquote>
<p>Hä? Ist dem wirklich so, dass man bei einem Funktionsaufruf lieber den Raw-Pointer weitergibt?!?<br />
Wozu sollte man denn dies tun? Ok ... der Ref-Zähler wird für den Funktionsaufruf einmal hoch gezählt (also hat man da ein wenig Overhead drin), aber dafür habe ich doch genau so einen shared_ptr, damit dies automatisch passiert und ich dann auch in der Funktion weiss, dass ich den Speicher für das übergebene Objekt nicht selbst freigeben muss ... dachte ich bis jetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438352</guid><dc:creator><![CDATA[shared_nicht_verstanden?]]></dc:creator><pubDate>Mon, 19 Jan 2015 10:07:02 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 10:18:08 GMT]]></title><description><![CDATA[<p>shared_nicht_verstanden? schrieb:</p>
<blockquote>
<p>Hä? Ist dem wirklich so, dass man bei einem Funktionsaufruf lieber den Raw-Pointer weitergibt?!?</p>
</blockquote>
<p>Eigentlich lieber eine Referenz.</p>
<blockquote>
<p>Wozu sollte man denn dies tun? Ok ... der Ref-Zähler wird für den Funktionsaufruf einmal hoch gezählt (also hat man da ein wenig Overhead drin), aber dafür habe ich doch genau so einen shared_ptr, damit dies automatisch passiert und ich dann auch in der Funktion weiss, dass ich den Speicher für das übergebene Objekt nicht selbst freigeben muss ... dachte ich bis jetzt.</p>
</blockquote>
<p>Einer Funktion einen shared_ptr zu übergeben macht nur dann Sinn, wenn dieser den Funktionsaufruf überlebt (also irgendwo gespeichert wird) <strong>und</strong> der shared_ptr vom Aufrufer noch benötigt wird.</p>
<p>Ansonsten reicht Übergabe per Referenz oder, je nach Anwendungsfall, unique_ptr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438355</guid><dc:creator><![CDATA[shallow_ptr]]></dc:creator><pubDate>Mon, 19 Jan 2015 10:18:08 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 10:26:47 GMT]]></title><description><![CDATA[<p>shared_nicht_verstanden? schrieb:</p>
<blockquote>
<p>Hä? Ist dem wirklich so, dass man bei einem Funktionsaufruf lieber den Raw-Pointer weitergibt?!?<br />
Wozu sollte man denn dies tun? Ok ... der Ref-Zähler wird für den Funktionsaufruf einmal hoch gezählt (also hat man da ein wenig Overhead drin), aber dafür habe ich doch genau so einen shared_ptr, damit dies automatisch passiert und ich dann auch in der Funktion weiss, dass ich den Speicher für das übergebene Objekt nicht selbst freigeben muss ... dachte ich bis jetzt.</p>
</blockquote>
<p>Ja, dem ist wirklich so.<br />
Das hochzählen des ref-counts muss atomar erfolgen und das kostet halt.</p>
<p>Es ist gängige/empfohlene Praxis einen Shared Pointer nicht anders als andere Objekte zu betrachten, vom call by value/call by reference Standpunkt.</p>
<p>Mit anderen Worten call by value Übergabe nur, wenn du wirklich einen neuen Owner hast ansonsten Shared Ptr als reference übergeben oder nackten Ptr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438356</guid><dc:creator><![CDATA[Ruvi]]></dc:creator><pubDate>Mon, 19 Jan 2015 10:26:47 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 11:11:19 GMT]]></title><description><![CDATA[<p>Smartpointer sind kein Ersatz für rohe Zeiger. Smartpointer sind dazu gedacht, mit Ownership umzugehen; ein Smartpointer repräsentiert einen Besitzer eines dynamisch erzeugten Objektes. unique_ptr verwendet man für den üblichen Fall von Objekten mit genau einem Besitzer; shared_ptr ist für den eher seltenen Fall von geteilten Besitzverhältnissen gedacht. Faustregel: Am besten erzeugt man Objekte gar nicht dynamisch, wenn man aber wirklich mal muss, dann nimmt man unique_ptr, sofern man nicht wirklich gute Gründe hat, was Anderes zu tun. Der Besitz und die Verwendung von Objekten sind völlig unabhängige Dinge. Letzteres drückt man mit Referenzen bzw. rohen Zeigern aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438361</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 19 Jan 2015 11:11:19 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 11:13:21 GMT]]></title><description><![CDATA[<p>Ok danke euch. Ich würde gerne einen std::vector dynamisch alloziieren über shared ptr damit dieser vector sich selbst wieder freigibt. allerdings scheitere ich am zugriff und bräuchte kleine Hilfe.</p>
<p>Ich frage mich z.B. wie ich elemente in den vector fülle?</p>
<pre><code>std::shared_ptr&lt;std::vector&lt;int&gt;&gt; a(new std::vector&lt;int&gt;(4));
	a.get().insert(a.get().begin(), 8);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2438363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438363</guid><dc:creator><![CDATA[babmo]]></dc:creator><pubDate>Mon, 19 Jan 2015 11:13:21 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 11:17:15 GMT]]></title><description><![CDATA[<p>babmo schrieb:</p>
<blockquote>
<p>Ok danke euch. Ich würde gerne einen std::vector dynamisch alloziieren über shared ptr damit dieser vector sich selbst wieder freigibt.</p>
</blockquote>
<p>wieso? was willst du damit erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438364</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 19 Jan 2015 11:17:15 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 11:21:24 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::shared_ptr&lt;std::vector&lt;int&gt;&gt; a(new std::vector&lt;int&gt;(4));
a-&gt;insert(a-&gt;begin(), 8);
</code></pre>
<p>Aber ein vector auf dem heap ist vermutlich dummes Zeug</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438366</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 19 Jan 2015 11:21:24 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 11:28:53 GMT]]></title><description><![CDATA[<p>babmo schrieb:</p>
<blockquote>
<p>Ok danke euch. Ich würde gerne einen std::vector dynamisch alloziieren <s>über shared ptr</s> damit dieser vector sich selbst wieder freigibt. allerdings scheitere ich am zugriff und bräuchte kleine Hilfe.</p>
<p>Ich frage mich z.B. wie ich elemente in den vector fülle?</p>
</blockquote>
<p>Du meinst das hier?</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; a(4);
a.insert(a.begin(), 8);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2438368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438368</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Mon, 19 Jan 2015 11:28:53 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 12:23:36 GMT]]></title><description><![CDATA[<p>hmm, aber da ist ja dann kein shared pointer drin, also wenn ich einen std::vector als shared pointer alloziiere. oder macht man das nicht sondern immer nur die objekte des vectors?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438376</guid><dc:creator><![CDATA[babmo]]></dc:creator><pubDate>Mon, 19 Jan 2015 12:23:36 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 12:57:33 GMT]]></title><description><![CDATA[<p>Ein vector ist GENAU das gleiche wie ein Array. Wenn er auf dem Stack allokiert wird, kannst du einen Stackoverflow bekommen.</p>
<p>shared_ptr ist IMMER der Smartpointer der Wahl, deshalb ist dein Code genau richtig.</p>
<p>Nur dass man statt</p>
<pre><code class="language-cpp">a-&gt;insert(a-&gt;begin(), 8);
</code></pre>
<p>lieber</p>
<pre><code class="language-cpp">(*a.get()).insert((*a.get).begin(), 8);
</code></pre>
<p>schreibt, weil die Dereferenzierung von einem Zeiger schneller ist als von einem Smartpointer.</p>
<p>Üblich ist da ein Makro:</p>
<pre><code class="language-cpp">#define a (((****(((a))).get()))))))
a.insert(a.begin(), 8);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2438378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438378</guid><dc:creator><![CDATA[tatsache]]></dc:creator><pubDate>Mon, 19 Jan 2015 12:57:33 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 12:58:55 GMT]]></title><description><![CDATA[<p>tatsache schrieb:</p>
<blockquote>
<p>Ein vector ist GENAU das gleiche wie ein Array. Wenn er auf dem Stack allokiert wird, kannst du einen Stackoverflow bekommen.</p>
</blockquote>
<p>Schwachsinn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438379</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 19 Jan 2015 12:58:55 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 13:01:39 GMT]]></title><description><![CDATA[<p>babmo schrieb:</p>
<blockquote>
<p>hmm, aber da ist ja dann kein shared pointer drin, also wenn ich einen std::vector als shared pointer alloziiere. oder macht man das nicht sondern immer nur die objekte des vectors?</p>
</blockquote>
<p><strong>Warum</strong> willst du eine shared pointer verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438381</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 19 Jan 2015 13:01:39 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 13:05:54 GMT]]></title><description><![CDATA[<p>tatsache schrieb:</p>
<blockquote>
<p>Ein vector ist GENAU das gleiche wie ein Array. Wenn er auf dem Stack allokiert wird, kannst du einen Stackoverflow bekommen.</p>
<p>shared_ptr ist IMMER der Smartpointer der Wahl, deshalb ist dein Code genau richtig.</p>
<p>Nur dass man statt</p>
<pre><code class="language-cpp">a-&gt;insert(a-&gt;begin(), 8);
</code></pre>
<p>lieber</p>
<pre><code class="language-cpp">(*a.get()).insert((*a.get).begin(), 8);
</code></pre>
<p>schreibt, weil die Dereferenzierung von einem Zeiger schneller ist als von einem Smartpointer.</p>
<p>Üblich ist da ein Makro:</p>
<pre><code class="language-cpp">#define a (((****(((a))).get()))))))
a.insert(a.begin(), 8);
</code></pre>
</blockquote>
<p>Dasen Trollpost?! hu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438383</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 19 Jan 2015 13:05:54 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 13:09:38 GMT]]></title><description><![CDATA[<p>tatsache schrieb:</p>
<blockquote>
<p>Ein vector ist GENAU das gleiche wie ein Array. Wenn er auf dem Stack allokiert wird, kannst du einen Stackoverflow bekommen.</p>
</blockquote>
<p>Der &quot;Content&quot; eines vectors liegt auf dem Heap, da kann es zu keinem Stackoverflow kommen.</p>
<p>Das einzige was auf dem Stack liegt ist der Pointer und vielleicht noch ein paar Variablen zur Administration.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438384</guid><dc:creator><![CDATA[Ruvi]]></dc:creator><pubDate>Mon, 19 Jan 2015 13:09:38 GMT</pubDate></item><item><title><![CDATA[Reply to shared pointer visual studio on Mon, 19 Jan 2015 16:21:53 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18806">@Skym0sh0</a><br />
Ja.<br />
Obvious Troll is obvious.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2438423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2438423</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 19 Jan 2015 16:21:53 GMT</pubDate></item></channel></rss>