<?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[Move CTOR?]]></title><description><![CDATA[<p>Guten Morgen Gemeinde,</p>
<p>ich habe mal wieder eine Frage. Wenn ich eine Vectorklasse von vector ableite, wie muß dann der Move Konstruktor aussehen?<br />
Ist das folgende korrekt?</p>
<pre><code>template&lt;class T&gt;
class MyVector : public vector&lt;T&gt;
{
  MyVector(MyVector&amp;&amp; other)
  {
    this = std::move(other);
  }
};
</code></pre>
<p>Wenn ich in MyVector mit T* ptr; und new/delete arbeiten würde wäre es einfach, was ist aber mit dem Container als Basisklasse?</p>
<p>Gruß Andreas Georg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322679/move-ctor</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 19:41:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322679.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Jan 2014 06:22:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Move CTOR? on Fri, 03 Jan 2014 06:22:08 GMT]]></title><description><![CDATA[<p>Guten Morgen Gemeinde,</p>
<p>ich habe mal wieder eine Frage. Wenn ich eine Vectorklasse von vector ableite, wie muß dann der Move Konstruktor aussehen?<br />
Ist das folgende korrekt?</p>
<pre><code>template&lt;class T&gt;
class MyVector : public vector&lt;T&gt;
{
  MyVector(MyVector&amp;&amp; other)
  {
    this = std::move(other);
  }
};
</code></pre>
<p>Wenn ich in MyVector mit T* ptr; und new/delete arbeiten würde wäre es einfach, was ist aber mit dem Container als Basisklasse?</p>
<p>Gruß Andreas Georg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374763</guid><dc:creator><![CDATA[fwbp34]]></dc:creator><pubDate>Fri, 03 Jan 2014 06:22:08 GMT</pubDate></item><item><title><![CDATA[Reply to Move CTOR? on Fri, 03 Jan 2014 07:44:56 GMT]]></title><description><![CDATA[<p>1. std::vector&lt;T&gt; ist nicht als Basisklasse geeignet.<br />
2.</p>
<pre><code class="language-cpp">MyVector(MyVector&amp;&amp; other)
 : std::vector&lt;T&gt;{std::forward&lt;MyVector&gt;(other)} {}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2374768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374768</guid><dc:creator><![CDATA[Diesel Wiesel]]></dc:creator><pubDate>Fri, 03 Jan 2014 07:44:56 GMT</pubDate></item><item><title><![CDATA[Reply to Move CTOR? on Fri, 03 Jan 2014 08:12:32 GMT]]></title><description><![CDATA[<p>Danke Dir.</p>
<p>Zu ist nicht geeignet, da hast Du sicherlich recht.</p>
<p>Aber mir ist nichts besseres eingefallen um meinen Vektor Addition, Multiplikation usw. beizubringen.</p>
<p>Gruß Andreas Georg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374771</guid><dc:creator><![CDATA[fwbp34]]></dc:creator><pubDate>Fri, 03 Jan 2014 08:12:32 GMT</pubDate></item><item><title><![CDATA[Reply to Move CTOR? on Fri, 03 Jan 2014 09:22:20 GMT]]></title><description><![CDATA[<p>fwbp34 schrieb:</p>
<blockquote>
<p>Aber mir ist nichts besseres eingefallen um meinen Vektor Addition, Multiplikation usw. beizubringen.</p>
</blockquote>
<p>dazu gibt es bessere möglichkeiten:</p>
<pre><code>// Iterator-Pattern
template&lt;typename InputIteratorType&gt;
void Add(InputIteratorType LhsBegin, InputIteratorType LhsEnd, InputIteratorType RhsBegin)
{
	while(LhsBegin != LhsEnd)
	{
		*LhsBegin++ += *RhsBegin++;
	}
}

// Operator-Überladung
template&lt;typename T, typename LhsAllocator, typename RhsAllocator&gt;
std::vector&lt;T, LhsAllocator&gt;&amp; operator+= (std::vector&lt;T, LhsAllocator&gt;&amp; Lhs, std::vector&lt;T, RhsAllocator&gt; const&amp; Rhs)
{
	// Range prüfen, evtl. throwen
	for(typename std::vector&lt;T, LhsAllocator&gt;::size_type i = 0; i &lt; Lhs.size(); ++i)
	{
		Lhs[i] += Rhs[i];
	}
	// Edit: Hier natürlich noch ein return-Statement, das hab ich Schussel natürlich vergessen:
	return Lhs;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2374773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374773</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Fri, 03 Jan 2014 09:22:20 GMT</pubDate></item><item><title><![CDATA[Reply to Move CTOR? on Fri, 03 Jan 2014 08:48:49 GMT]]></title><description><![CDATA[<p>Wenn du kleinere vectoren für Spiele willst bau das lieber auf std::array auf (als Member, nicht erben! Oo Oder vielleicht noch besser, überlade einfach die Operatoren für std::array&lt;float, N&gt;.) und nimm die Größe als Template-Parameter. Dafür jedes mal neu Speicher anzufordern macht weder Sinn noch ist es (cache) effizient. Zudem ist std::forward hier nicht angebracht, nimm std::move. std::forward ist nur für einen Spezialfall in der Sprache gedacht bei dem du noch nicht weist ob du eine rvalue-reference oder eine lvalue-reference vorliegen hast.</p>
<pre><code>MyVector(MyVector&amp;&amp; other)
    : std::vector&lt;T&gt;{std::move(other)}
{}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2374776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374776</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 03 Jan 2014 08:48:49 GMT</pubDate></item></channel></rss>