<?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[Anwendung von PerfectForwarding in der Praxis]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe in meiner Anwendung viele Stellen, an denen z.B. ein std::vector erstellt und befüllt wird. Danach wird dieser Vector an eine andere Klasse zur weiterverarbeitung überreicht.</p>
<p>Die aufrufende Klasse macht mit dem std::vector danach nichts mehr. Das hört sich für mich nach einem Fall an, wo ich die Move-Semantik verwenden könnte um ohne SmartPtr/Heap-Objekte billig Objekte weiterreichen könnte.</p>
<p>Nur so richtig klar ist mir nicht, wie der Code aussehen sollte.</p>
<p>Macht man das wie folgt dargestellt?</p>
<pre><code class="language-cpp">class Datensenke {
  public:
  Datensenke(std::vector&lt;size_t&gt; &amp;&amp;vec)
    : myVec_(vec) {
  }

  void machWas();

  private:
  std::vector&lt;size_t&gt; myVec_;
};

class Datenquelle {
  public:
  void verarbeite() {
      for (size_t i = 0; i &lt; 100; ++i) {
          myVec_.push_back(i);
      }

      Datensenke senke(std::move(myVec_));
      senke.machWas();
  }

  private:
  std::vector&lt;size_t&gt; myVec_;
};
</code></pre>
<p>Falls ja, eine Folgefrage: wie kann ich eine RValue-Referenz weitergeben? Beispiel:</p>
<pre><code class="language-cpp">class Datensenke {
  public:
  Datensenke(std::vector&lt;size_t&gt; &amp;&amp;vec)
    : myVec_(vec) {
  }

  void machWas();

  private:
  std::vector&lt;size_t&gt; myVec_;
};

void verarbeite(std::vector&lt;size_t&gt; &amp;&amp;vec)  // &lt;&lt;---- Ist das so richtig, oder sollte hier std::vector&lt;size_t&gt; stehen?
{
      Datensenke senke(std::move(myVec_));  // &lt;&lt;---- Wie gebe ich hier vec weiter?
      senke.machWas();
}

int main()
{
    std::vector&lt;size_t&gt; myVec;
    for(size_t i = 0; i &lt; 1000; ++i) {
       myVec.push_back(i);
    }

   verarbeite(std::move(myVec));

   return 0;
}
</code></pre>
<p>Danke.</p>
<p>Grüße Wadim</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/337115/anwendung-von-perfectforwarding-in-der-praxis</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 10:02:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/337115.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Mar 2016 17:22:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anwendung von PerfectForwarding in der Praxis on Wed, 09 Mar 2016 17:22:56 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe in meiner Anwendung viele Stellen, an denen z.B. ein std::vector erstellt und befüllt wird. Danach wird dieser Vector an eine andere Klasse zur weiterverarbeitung überreicht.</p>
<p>Die aufrufende Klasse macht mit dem std::vector danach nichts mehr. Das hört sich für mich nach einem Fall an, wo ich die Move-Semantik verwenden könnte um ohne SmartPtr/Heap-Objekte billig Objekte weiterreichen könnte.</p>
<p>Nur so richtig klar ist mir nicht, wie der Code aussehen sollte.</p>
<p>Macht man das wie folgt dargestellt?</p>
<pre><code class="language-cpp">class Datensenke {
  public:
  Datensenke(std::vector&lt;size_t&gt; &amp;&amp;vec)
    : myVec_(vec) {
  }

  void machWas();

  private:
  std::vector&lt;size_t&gt; myVec_;
};

class Datenquelle {
  public:
  void verarbeite() {
      for (size_t i = 0; i &lt; 100; ++i) {
          myVec_.push_back(i);
      }

      Datensenke senke(std::move(myVec_));
      senke.machWas();
  }

  private:
  std::vector&lt;size_t&gt; myVec_;
};
</code></pre>
<p>Falls ja, eine Folgefrage: wie kann ich eine RValue-Referenz weitergeben? Beispiel:</p>
<pre><code class="language-cpp">class Datensenke {
  public:
  Datensenke(std::vector&lt;size_t&gt; &amp;&amp;vec)
    : myVec_(vec) {
  }

  void machWas();

  private:
  std::vector&lt;size_t&gt; myVec_;
};

void verarbeite(std::vector&lt;size_t&gt; &amp;&amp;vec)  // &lt;&lt;---- Ist das so richtig, oder sollte hier std::vector&lt;size_t&gt; stehen?
{
      Datensenke senke(std::move(myVec_));  // &lt;&lt;---- Wie gebe ich hier vec weiter?
      senke.machWas();
}

int main()
{
    std::vector&lt;size_t&gt; myVec;
    for(size_t i = 0; i &lt; 1000; ++i) {
       myVec.push_back(i);
    }

   verarbeite(std::move(myVec));

   return 0;
}
</code></pre>
<p>Danke.</p>
<p>Grüße Wadim</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2489789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2489789</guid><dc:creator><![CDATA[Wadim23]]></dc:creator><pubDate>Wed, 09 Mar 2016 17:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to Anwendung von PerfectForwarding in der Praxis on Wed, 09 Mar 2016 17:28:09 GMT]]></title><description><![CDATA[<pre><code>Datensenke(std::vector&lt;size_t&gt; &amp;&amp;vec) 
    : myVec_(vec) { 
  }
</code></pre>
<p><code>vec</code> ist ein lvalue. Daher wird eine Kopie durchgeführt. <code>std::move(vec)</code> ist hingegen ein rvalue (xvalue).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2489790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2489790</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 09 Mar 2016 17:28:09 GMT</pubDate></item><item><title><![CDATA[Reply to Anwendung von PerfectForwarding in der Praxis on Thu, 10 Mar 2016 16:19:50 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<pre><code>Datensenke(std::vector&lt;size_t&gt; &amp;&amp;vec) 
    : myVec_(vec) { 
  }
</code></pre>
<p><code>vec</code> ist ein lvalue. Daher wird eine Kopie durchgeführt. <code>std::move(vec)</code> ist hingegen ein rvalue (xvalue).</p>
</blockquote>
<p>Interessant, ich bekomme bei meinem g++ keine Warnung an dieser Stelle.</p>
<p>Was für ein Konstruktor ruft der g++ dann auf (ohne das move)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2489913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2489913</guid><dc:creator><![CDATA[Wadim23]]></dc:creator><pubDate>Thu, 10 Mar 2016 16:19:50 GMT</pubDate></item><item><title><![CDATA[Reply to Anwendung von PerfectForwarding in der Praxis on Thu, 10 Mar 2016 16:22:16 GMT]]></title><description><![CDATA[<p>P.S. was ist der Unterschied zwischen std::move und std::forward?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2489914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2489914</guid><dc:creator><![CDATA[Wadim23]]></dc:creator><pubDate>Thu, 10 Mar 2016 16:22:16 GMT</pubDate></item></channel></rss>