<?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[Smartpointer - ein paar Fragen]]></title><description><![CDATA[<p>Hallo,<br />
Ich beschäftige mich zur Zeit mit Smartpointern und habe ein kleines Testbeispiel erstellt.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;memory&gt;
#include &lt;ctime&gt;

std::tr1::shared_ptr&lt;int&gt; randnum(){
	return std::tr1::shared_ptr&lt;int&gt;(new int(rand()%100));
}

int main(int argc, char *argv[]){

	srand(static_cast&lt;int&gt;(time(NULL)));

	std::vector&lt;std::tr1::shared_ptr&lt;int&gt; &gt; Numbers(10);

	std::generate(Numbers.begin(),Numbers.end(),randnum);

	for(std::vector&lt;std::tr1::shared_ptr&lt;int&gt; &gt;::iterator it=Numbers.begin();it!=Numbers.end();it++){
		std::cout&lt;&lt;*(it-&gt;get())&lt;&lt;&quot; &quot;&lt;&lt;(it-&gt;use_count())&lt;&lt;std::endl;	
	}
}
</code></pre>
<p>Dazu hätte ich ein paar Fragen:</p>
<p>1.) Ich habe gelesen, dass man keine auto_ptr als Member von STL Containern verwenden sollte.<br />
Wie verhält es sich da mit shared_ptr?</p>
<p>2.) In meinem Beispiel habe ich eine Funktion die einen shared_ptr zurückgibt.<br />
Dabei wird der shared_ptr einmal kopiert(?) Also gibt es für diesen kurzen Augenblick 2 Referenzen auf die Daten, oder?</p>
<p>3.) Bei der Deklaration wird als Template-Argument int angegeben, obwohl eigentlich ein shared_ptr auf new int(), also int* zurückgegeben wird. Wie wäre das dann bei int** ?</p>
<p>Würde mich freuen wenn mir da Jemand helfen könnte.<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292094/smartpointer-ein-paar-fragen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 06:39:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292094.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Sep 2011 16:36:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Smartpointer - ein paar Fragen on Fri, 02 Sep 2011 16:36:54 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Ich beschäftige mich zur Zeit mit Smartpointern und habe ein kleines Testbeispiel erstellt.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;memory&gt;
#include &lt;ctime&gt;

std::tr1::shared_ptr&lt;int&gt; randnum(){
	return std::tr1::shared_ptr&lt;int&gt;(new int(rand()%100));
}

int main(int argc, char *argv[]){

	srand(static_cast&lt;int&gt;(time(NULL)));

	std::vector&lt;std::tr1::shared_ptr&lt;int&gt; &gt; Numbers(10);

	std::generate(Numbers.begin(),Numbers.end(),randnum);

	for(std::vector&lt;std::tr1::shared_ptr&lt;int&gt; &gt;::iterator it=Numbers.begin();it!=Numbers.end();it++){
		std::cout&lt;&lt;*(it-&gt;get())&lt;&lt;&quot; &quot;&lt;&lt;(it-&gt;use_count())&lt;&lt;std::endl;	
	}
}
</code></pre>
<p>Dazu hätte ich ein paar Fragen:</p>
<p>1.) Ich habe gelesen, dass man keine auto_ptr als Member von STL Containern verwenden sollte.<br />
Wie verhält es sich da mit shared_ptr?</p>
<p>2.) In meinem Beispiel habe ich eine Funktion die einen shared_ptr zurückgibt.<br />
Dabei wird der shared_ptr einmal kopiert(?) Also gibt es für diesen kurzen Augenblick 2 Referenzen auf die Daten, oder?</p>
<p>3.) Bei der Deklaration wird als Template-Argument int angegeben, obwohl eigentlich ein shared_ptr auf new int(), also int* zurückgegeben wird. Wie wäre das dann bei int** ?</p>
<p>Würde mich freuen wenn mir da Jemand helfen könnte.<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2114053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2114053</guid><dc:creator><![CDATA[zhxo84]]></dc:creator><pubDate>Fri, 02 Sep 2011 16:36:54 GMT</pubDate></item><item><title><![CDATA[Reply to Smartpointer - ein paar Fragen on Fri, 02 Sep 2011 16:38:45 GMT]]></title><description><![CDATA[<p>zhxo84 schrieb:</p>
<blockquote>
<p>1.) Ich habe gelesen, dass man keine auto_ptr als Member von STL Containern verwenden sollte.<br />
Wie verhält es sich da mit shared_ptr?</p>
</blockquote>
<p>Erlaubt.</p>
<p>zhxo84 schrieb:</p>
<blockquote>
<p>2.) In meinem Beispiel habe ich eine Funktion die einen shared_ptr zurückgibt.<br />
Dabei wird der shared_ptr einmal kopiert(?) Also gibt es für diesen kurzen Augenblick 2 Referenzen auf die Daten, oder?</p>
</blockquote>
<p>Ja, wenn der Compiler nicht optimiert.</p>
<p>zhxo84 schrieb:</p>
<blockquote>
<p>3.) Bei der Deklaration wird als Template-Argument int angegeben, obwohl eigentlich ein shared_ptr auf new int(), also int* zurückgegeben wird. Wie wäre das dann bei int** ?</p>
</blockquote>
<p>Dann gibst du als Argument int* an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2114054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2114054</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 02 Sep 2011 16:38:45 GMT</pubDate></item><item><title><![CDATA[Reply to Smartpointer - ein paar Fragen on Fri, 02 Sep 2011 16:56:02 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Dann gibst du als Argument int* an.</p>
</blockquote>
<p>oder du machst einen<br />
shared_ptr&lt;shared_ptr&lt;int&gt; &gt;<br />
wenn du gar keine raw pointer mehr haben möchtest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2114061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2114061</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Fri, 02 Sep 2011 16:56:02 GMT</pubDate></item><item><title><![CDATA[Reply to Smartpointer - ein paar Fragen on Fri, 02 Sep 2011 17:00:55 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antwort.</p>
<p>Ich hätte noch eine abschließende Frage:<br />
Wenn ich Smartpointer in einem std::vector verwenden möchte, sollte ich dann eher den std::tr1::shared_ptr oder den boost shared_ptr verwenden?</p>
<p>Hierbei geht es mir nur darum, dass der Speicher der jeweiligen Elemente über die Smartpointer freigegeben wird wenn der vector zerstört (oder mit clear() geleert) wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2114063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2114063</guid><dc:creator><![CDATA[zhxo84]]></dc:creator><pubDate>Fri, 02 Sep 2011 17:00:55 GMT</pubDate></item><item><title><![CDATA[Reply to Smartpointer - ein paar Fragen on Fri, 02 Sep 2011 17:06:24 GMT]]></title><description><![CDATA[<p>tr1::shared_ptr ist boost::shared_ptr. Wenn du allerdings keine geteilten Besitzverhältnisse brauchst und C++0x verwendest, dann nimm std::unique_ptr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2114066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2114066</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 02 Sep 2011 17:06:24 GMT</pubDate></item><item><title><![CDATA[Reply to Smartpointer - ein paar Fragen on Fri, 02 Sep 2011 17:11:00 GMT]]></title><description><![CDATA[<p>Alles klar, danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2114070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2114070</guid><dc:creator><![CDATA[zhxo84]]></dc:creator><pubDate>Fri, 02 Sep 2011 17:11:00 GMT</pubDate></item><item><title><![CDATA[Reply to Smartpointer - ein paar Fragen on Fri, 02 Sep 2011 17:14:47 GMT]]></title><description><![CDATA[<p>@zhxo84:<br />
Wenn du C++0x Features nutzen kannst, dann nimm gleich einen std::unique_ptr.<br />
Oder nimm einen boost::ptr_vector.</p>
<p>Ansonsten kannst du den shared_ptr sowohl von TR1 als auch von Boost nehmen, die unterscheiden sich kaum (oder gar nicht?).</p>
<p>----</p>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>tr1::shared_ptr ist boost::shared_ptr.</p>
</blockquote>
<p>Dass das, so formuliert, nicht richtig ist, weisst du doch selbst, oder?<br />
Sie mögen fast gleich oder sogar exakt gleich definiert sein (äquivalent), aber deswegen sind sie nicht identisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2114073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2114073</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 02 Sep 2011 17:14:47 GMT</pubDate></item><item><title><![CDATA[Reply to Smartpointer - ein paar Fragen on Fri, 02 Sep 2011 17:40:16 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>@zhxo84:<br />
Wenn du C++0x Features nutzen kannst, dann nimm gleich einen std::unique_ptr.<br />
Oder nimm einen boost::ptr_vector.</p>
<p>Ansonsten kannst du den shared_ptr sowohl von TR1 als auch von Boost nehmen, die unterscheiden sich kaum (oder gar nicht?).</p>
</blockquote>
<p>Danke, im Moment verwende ich MSVC2008 - bleibe also auf TR1 beschränkt. Boost habe ich bisher noch nie verwendet, werde es mir aber einmal ansehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2114084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2114084</guid><dc:creator><![CDATA[zhxo84]]></dc:creator><pubDate>Fri, 02 Sep 2011 17:40:16 GMT</pubDate></item></channel></rss>