<?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[vector zurückgeben]]></title><description><![CDATA[<p>Wenn ich folgende Situation habe:</p>
<pre><code class="language-cpp">vector&lt;T&gt; foo()
{
  vector&lt;T&gt; bar;
  // tue was mit bar
  return bar;
}
vector&lt;T&gt; bar = foo();
</code></pre>
<p>ist das langsamer als</p>
<pre><code class="language-cpp">void foo(vector&lt;T&gt;&amp; bar)
{
 // tue was mit bar
}
vector&lt;T&gt; bar;
foo(bar);
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/274596/vector-zurückgeben</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 08:45:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/274596.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Sep 2010 09:23:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector zurückgeben on Wed, 29 Sep 2010 09:23:51 GMT]]></title><description><![CDATA[<p>Wenn ich folgende Situation habe:</p>
<pre><code class="language-cpp">vector&lt;T&gt; foo()
{
  vector&lt;T&gt; bar;
  // tue was mit bar
  return bar;
}
vector&lt;T&gt; bar = foo();
</code></pre>
<p>ist das langsamer als</p>
<pre><code class="language-cpp">void foo(vector&lt;T&gt;&amp; bar)
{
 // tue was mit bar
}
vector&lt;T&gt; bar;
foo(bar);
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958867</guid><dc:creator><![CDATA[heinr]]></dc:creator><pubDate>Wed, 29 Sep 2010 09:23:51 GMT</pubDate></item><item><title><![CDATA[Reply to vector zurückgeben on Wed, 29 Sep 2010 09:27:09 GMT]]></title><description><![CDATA[<p>Kurze Antwort: Ungefähr gleich schnell, denn das kann recht gut optimiert werden.</p>
<p>Für die lange Antwort: Such mal nach &quot;return value optimization&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958869</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 29 Sep 2010 09:27:09 GMT</pubDate></item><item><title><![CDATA[Reply to vector zurückgeben on Wed, 29 Sep 2010 10:08:00 GMT]]></title><description><![CDATA[<p>Oder für C++0x nach Move-Konstruktor, falls RVO nicht greift.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958882</guid><dc:creator><![CDATA[BadWolf]]></dc:creator><pubDate>Wed, 29 Sep 2010 10:08:00 GMT</pubDate></item><item><title><![CDATA[Reply to vector zurückgeben on Wed, 29 Sep 2010 13:15:32 GMT]]></title><description><![CDATA[<p>Falls RVO nicht angewandt wird, kann Variante 1 unter Umständen massiv langsamer sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959004</guid><dc:creator><![CDATA[_.-^-._]]></dc:creator><pubDate>Wed, 29 Sep 2010 13:15:32 GMT</pubDate></item><item><title><![CDATA[Reply to vector zurückgeben on Thu, 30 Sep 2010 04:28:15 GMT]]></title><description><![CDATA[<p>Dieser Artikel ist wie so oft sehr interessant:<br />
<a href="http://en.wikipedia.org/wiki/Return_value_optimization" rel="nofollow">http://en.wikipedia.org/wiki/Return_value_optimization</a></p>
<p>Anscheinend sollten wir also bei komplizierteren/bedingten Erzeugungen von Objekten nicht den RV nehmen, bis 0x kommt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959289</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 30 Sep 2010 04:28:15 GMT</pubDate></item><item><title><![CDATA[Reply to vector zurückgeben on Thu, 30 Sep 2010 05:08:16 GMT]]></title><description><![CDATA[<p>Wenn du ein Vector zurückgeben willst must du das so machen:</p>
<pre><code class="language-cpp">std::vector&lt;std::string&gt; abc(std::string abc)
{
//irgend was
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1959292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959292</guid><dc:creator><![CDATA[CCodex]]></dc:creator><pubDate>Thu, 30 Sep 2010 05:08:16 GMT</pubDate></item><item><title><![CDATA[Reply to vector zurückgeben on Thu, 30 Sep 2010 09:22:33 GMT]]></title><description><![CDATA[<p>Wie sieht es mit der Alternative aus, Smart-Pointer zu verwenden um das kostspielige Kopieren zu vermeiden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959393</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Thu, 30 Sep 2010 09:22:33 GMT</pubDate></item><item><title><![CDATA[Reply to vector zurückgeben on Thu, 30 Sep 2010 10:12:17 GMT]]></title><description><![CDATA[<p>Und dafür alles auf dem Heap anlegen müssen? Pfui.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959431</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 30 Sep 2010 10:12:17 GMT</pubDate></item><item><title><![CDATA[Reply to vector zurückgeben on Thu, 30 Sep 2010 10:16:02 GMT]]></title><description><![CDATA[<blockquote>
<p>Heap = Pfui! Stack = Hui!</p>
</blockquote>
<p>Kann man das so generell sagen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959435</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Thu, 30 Sep 2010 10:16:02 GMT</pubDate></item><item><title><![CDATA[Reply to vector zurückgeben on Thu, 30 Sep 2010 10:22:15 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<blockquote>
<p>Heap = Pfui! Stack = Hui!</p>
</blockquote>
<p>Kann man das so generell sagen?</p>
</blockquote>
<p>Nicht generell, aber ich würde grundsätzlich erst einmal Programme möglichst leicht verständlich schreiben (was die Thematik Zeiger zumindest etwas reduziert), und dann schauen was langsam ist und ggf. angepasst gehört.</p>
<p>Gerade in Hinblick auf den kommenden Standard hoffe ich das dieses Thema in Zukunft weitaus unproblematischer sein wird. Ganz davon abgesehen das auch C++ nicht den Heap ausschließt, sondern häufig nur etwas kapselt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959439</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 30 Sep 2010 10:22:15 GMT</pubDate></item><item><title><![CDATA[Reply to vector zurückgeben on Thu, 30 Sep 2010 10:28:31 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Nicht generell, aber ich würde grundsätzlich erst einmal Programme möglichst leicht verständlich schreiben (was die Thematik Zeiger zumindest etwas reduziert), und dann schauen was langsam ist und ggf. angepasst gehört.</p>
</blockquote>
<p>Hmm. Ich dachte immer, Heap vs. Stack wäre mehr eine Frage der Objektgröße.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959445</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Thu, 30 Sep 2010 10:28:31 GMT</pubDate></item><item><title><![CDATA[Reply to vector zurückgeben on Thu, 30 Sep 2010 11:14:25 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<p>Hmm. Ich dachte immer, Heap vs. Stack wäre mehr eine Frage der Objektgröße.</p>
</blockquote>
<p>Das ist eher der technische Grund. Aber dafür kann (und sollte) man große Objekte ja so bauen, dass sie selber ihren Speicher auf dem Heap selber anlegen und verwalten.</p>
<p>Der programmiertechnische Unterschied, und darauf kommt es an, ist die Lebensdauer der Objekte. Bei Stackobjekten muss man sich in der Regel um nichts kümmern weil alles automatisch geht, dafür kann man aber einige bestimmte Sachen nicht machen. Bei Sachen auf den Heap hat man die volle Kontrolle, aber auch die volle Verantwortung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959469</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 30 Sep 2010 11:14:25 GMT</pubDate></item><item><title><![CDATA[Reply to vector zurückgeben on Thu, 30 Sep 2010 12:10:34 GMT]]></title><description><![CDATA[<p>Da ich denke, dass die Grundfrage jetzt ganz gut beantwortet ist, würde ich gerne anreihen:</p>
<p>Ich habe jetzt tatsächlich eine recht aufwendige Factory-Methode.</p>
<p>Genauer: Ich implementiere eine Art Factory Pattern. Eine Basisklasse hat eine Methode:</p>
<pre><code class="language-cpp">virtual Model LoadModel(const string&amp; filename) // ich weiß, ich nerve mit meinem Model-Gedöns :P
</code></pre>
<p>Diese ruft einer der LoadModel-Methoden ihrer Kinder auf, je nachdem, was der Benutzer gerade braucht (das Model kann mit verschiedenen Loadern geladen werden).</p>
<p>Jedenfalls sieht eine LoadModel-Methode tatsächlich so aus:</p>
<pre><code class="language-cpp">{
Model newModel;

func1(newModel);
func2(newModel);
func3(newModel);
// ...

return newModel;
}
</code></pre>
<p>funci seien private Methoden void funci(const Model&amp;), welche alle für sich was am Model rumbasteln.</p>
<p>Die LoadModel-Methode ist ja recht schlicht, bis auf die Aufrufe der anderen Methoden. Der Benutzer meines Spiels sollte natürlich nicht unbedingt lange warten und wenn hunderte von Modellen geladen werden, kann das selbstverständlich schon etwas dauern.</p>
<ol>
<li>Denkt ihr, der Compiler optimiert das hier noch weg?</li>
<li>Kann ich einfach den Model-copy-ctor privatisieren, um das zu prüfen?</li>
<li>Welche Alternative würdet ihr sonst nehmen, um die copy-ctor-Aufrufe zu vermeiden? Den Benutzer der Load-Klasse selbst ein Model erstellen lassen und es füllen a la:</li>
</ol>
<pre><code class="language-cpp">Model m;
modelLoader.LoadModel(&quot;wurst.3ds&quot;, m);
</code></pre>
<p>mit dem zweiten LoadModel-Parameter als Referenz? Wäre jetzt für mich das einzig Sinnvolle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959510</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 30 Sep 2010 12:10:34 GMT</pubDate></item><item><title><![CDATA[Reply to vector zurückgeben on Thu, 30 Sep 2010 12:22:28 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<ol>
<li>Denkt ihr, der Compiler optimiert das hier noch weg?</li>
<li>Kann ich einfach den Model-copy-ctor privatisieren, um das zu prüfen?</li>
</ol>
</blockquote>
<p>Vielleicht einfach testen und im Kopierkonstruktor eine Debug-Ausgabe erzeugen.<br />
<strong>Edit:</strong><br />
Evtl. hilft auch dieser Thread von Nexus weiter: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-273296.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-273296.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959518</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Thu, 30 Sep 2010 12:22:28 GMT</pubDate></item></channel></rss>