<?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[Smart Pointer als Parameter - Performance]]></title><description><![CDATA[<p>Hallo.<br />
Wenn ich einen Smart Pointer von einem Großen Objekt habe,<br />
kann ich den ohne bedenken(Performance) ohne Referenz als Funktions Parameter benutzten?</p>
<pre><code>void foo(std::unique_ptr&lt;BigObject&gt; obj);
</code></pre>
<p>oder sollte man lieber</p>
<pre><code>void foo(std::unique_ptr&lt;BigObject&gt;&amp; obj);
</code></pre>
<p>machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320317/smart-pointer-als-parameter-performance</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 03:50:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320317.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Sep 2013 12:56:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Smart Pointer als Parameter - Performance on Tue, 24 Sep 2013 12:56:44 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Wenn ich einen Smart Pointer von einem Großen Objekt habe,<br />
kann ich den ohne bedenken(Performance) ohne Referenz als Funktions Parameter benutzten?</p>
<pre><code>void foo(std::unique_ptr&lt;BigObject&gt; obj);
</code></pre>
<p>oder sollte man lieber</p>
<pre><code>void foo(std::unique_ptr&lt;BigObject&gt;&amp; obj);
</code></pre>
<p>machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355137</guid><dc:creator><![CDATA[DuffCola]]></dc:creator><pubDate>Tue, 24 Sep 2013 12:56:44 GMT</pubDate></item><item><title><![CDATA[Reply to Smart Pointer als Parameter - Performance on Tue, 24 Sep 2013 13:58:01 GMT]]></title><description><![CDATA[<p>Ich glaube, du hast smart pointer nicht verstanden, denn wenn du</p>
<pre><code class="language-cpp">void foo(std::unique_ptr&lt;BigObject&gt;&amp; obj)
</code></pre>
<p>als Ersatz fuer</p>
<pre><code class="language-cpp">void foo(std::unique_ptr&lt;BigObject&gt; obj);
</code></pre>
<p>schreiben kannst/moechtest, dann kannst du auch gleich</p>
<pre><code class="language-cpp">void foo(BigObject* obj)
</code></pre>
<p>schreiben, da keine Besitzverhaeltnisse transferiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355140</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 24 Sep 2013 13:58:01 GMT</pubDate></item><item><title><![CDATA[Reply to Smart Pointer als Parameter - Performance on Tue, 24 Sep 2013 13:48:34 GMT]]></title><description><![CDATA[<p>DuffCola schrieb:</p>
<blockquote>
<p>Wenn ich einen Smart Pointer von einem Großen Objekt habe,<br />
kann ich den ohne bedenken(Performance) ohne Referenz als Funktions Parameter benutzten?</p>
<pre><code>void foo(std::unique_ptr&lt;BigObject&gt; obj);
</code></pre>
<p>oder sollte man lieber</p>
<pre><code>void foo(std::unique_ptr&lt;BigObject&gt;&amp; obj);
</code></pre>
<p>machen?</p>
</blockquote>
<p>Kann man pauschal nicht beantworten. Es kommt drauf an, was das für eine Übergabe sein soll, ob foo sich den Zeiger irgendwo wegspeichert, ob foo den &quot;Besitz&quot; (teilweise) übernehmen soll, ...</p>
<p>Das erste ist in Ordnung, wenn foo eine Senke ist, an die du das Objekt abtreten willst.</p>
<p>Das zweite sieht nach einem &quot;out-Parameter&quot; aus.</p>
<p>Wenn die Funktion nur kurz irgendwas mit dem BigObject machen soll und sich dessen Adresse nicht wegspeichert, wäre es völlig legitim, einen rohen Zeiger bzw eine Referenz zu verwenden:</p>
<pre><code class="language-cpp">void foo(BigObject&amp; bor);

int main()
{
  :::
  foo(*my_shared_pointer_variable);
  :::
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2355161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355161</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 24 Sep 2013 13:48:34 GMT</pubDate></item><item><title><![CDATA[Reply to Smart Pointer als Parameter - Performance on Tue, 24 Sep 2013 15:56:07 GMT]]></title><description><![CDATA[<blockquote>
<p>kann ich den ohne bedenken(Performance) ohne Referenz als Funktions Parameter benutzten?</p>
</blockquote>
<p>Klar, intern ist ein Smart-Pointer auch nur der unterliegende Zeiger, der dann beim Move kopiert wird.</p>
<p>Wie allerdings schon erklärt wurde, ist der Anwendungsfall (mit Referenz) diskutabel. Vor allem drücken beide Funktionssignaturen zwei verschiedene Dinge aus. Daher ist es vielleicht performance-technisch dasselbe, aber definitiv nicht semantisch.</p>
<blockquote>
<p>Kann man pauschal nicht beantworten. Es kommt drauf an, was das für eine Übergabe sein soll, ob foo sich den Zeiger irgendwo wegspeichert, ob foo den &quot;Besitz&quot; (teilweise) übernehmen soll, ...</p>
</blockquote>
<p>Also ich gehe mal davon aus, dass es nur um die Übergabe geht, nicht darum, was intern noch gemacht wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355208</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 24 Sep 2013 15:56:07 GMT</pubDate></item><item><title><![CDATA[Reply to Smart Pointer als Parameter - Performance on Wed, 25 Sep 2013 05:31:29 GMT]]></title><description><![CDATA[<p>kurze Bemerkung am Rande: std::unique_ptr kann man gar nicht kopieren, darin besteht der Sinn von std::unique_ptr. man kann den Inhalt nur in einen anderen std::unique_ptr moven, wobei dann auch die ownership übertragen wird <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/2355312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355312</guid><dc:creator><![CDATA[dd++ 0]]></dc:creator><pubDate>Wed, 25 Sep 2013 05:31:29 GMT</pubDate></item><item><title><![CDATA[Reply to Smart Pointer als Parameter - Performance on Wed, 25 Sep 2013 08:00:09 GMT]]></title><description><![CDATA[<p>Wenn du einen SmartPointer kopieren willst ( call-by-value ), dann mögest du lieber einen shared_ptr verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355320</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Wed, 25 Sep 2013 08:00:09 GMT</pubDate></item><item><title><![CDATA[Reply to Smart Pointer als Parameter - Performance on Wed, 25 Sep 2013 09:16:35 GMT]]></title><description><![CDATA[<p>It0101 schrieb:</p>
<blockquote>
<p>Wenn du einen SmartPointer kopieren willst ( call-by-value ), dann mögest du lieber einen shared_ptr verwenden.</p>
</blockquote>
<p>Falsche Begruendung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355342</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Wed, 25 Sep 2013 09:16:35 GMT</pubDate></item></channel></rss>