<?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[[gelöst] Move, Copy und c&#x27;tor - Reihenfolge]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich arbeite mit Visual Studio 2012.</p>
<p>Folgender Code</p>
<pre><code class="language-cpp">class A
{
public:
  A();
  A(const A&amp; ToCopy);
  A(A&amp;&amp; ToMove);
  operator=(const A&amp; ToCopy) { Set(ToCopy);            };
  operator=(A&amp;&amp; ToMove)      { Set(std::move(ToMove)); };
  void Set(const A&amp; ToCopy);
  void Set(A&amp;&amp; ToMove);
};

A Eins, Zwei, Drei;

Eins = std::move(Zwei);    // Vorgang eins
Eins.Set(std::move(Drei)); // Vorgang zwei
</code></pre>
<p>Ich habe das mit dem Mover so verstanden, dass jetzt eigentlich Vorgang Eins und Zwei beide (einmal über Hilfsweg) in die Set(A&amp;&amp;) laufen müssten. Passiert aber nicht.</p>
<p>Vorgang zwei macht meine Set-Funktion, da explizit aufgerufen wurde.<br />
Vorgang eins macht aber den c'tor A(A&amp;&amp;):</p>
<pre><code class="language-cpp">// Vorgang eins wie es gemacht wird (Symbolisch)
A tmp(Drei);
&amp;Eins = &amp;tmp;
</code></pre>
<p>Ich wollte aber</p>
<pre><code class="language-cpp">// Vorgang eins Wunschdenken (Symbolisch)
Eins.operator=(std::move(Drei));
</code></pre>
<p>Ich hab das mit dem Debugger mehrfach getestet. <strong>Wo liegt mein Gedankenfehler?</strong><br />
Mir geht es um keinen speziellen Fall. Ich übe einfach gerade die Umstellung auf C++11.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321847/gelöst-move-copy-und-c-tor-reihenfolge</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 21:47:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321847.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 26 Nov 2013 11:54:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] Move, Copy und c&#x27;tor - Reihenfolge on Tue, 26 Nov 2013 12:41:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich arbeite mit Visual Studio 2012.</p>
<p>Folgender Code</p>
<pre><code class="language-cpp">class A
{
public:
  A();
  A(const A&amp; ToCopy);
  A(A&amp;&amp; ToMove);
  operator=(const A&amp; ToCopy) { Set(ToCopy);            };
  operator=(A&amp;&amp; ToMove)      { Set(std::move(ToMove)); };
  void Set(const A&amp; ToCopy);
  void Set(A&amp;&amp; ToMove);
};

A Eins, Zwei, Drei;

Eins = std::move(Zwei);    // Vorgang eins
Eins.Set(std::move(Drei)); // Vorgang zwei
</code></pre>
<p>Ich habe das mit dem Mover so verstanden, dass jetzt eigentlich Vorgang Eins und Zwei beide (einmal über Hilfsweg) in die Set(A&amp;&amp;) laufen müssten. Passiert aber nicht.</p>
<p>Vorgang zwei macht meine Set-Funktion, da explizit aufgerufen wurde.<br />
Vorgang eins macht aber den c'tor A(A&amp;&amp;):</p>
<pre><code class="language-cpp">// Vorgang eins wie es gemacht wird (Symbolisch)
A tmp(Drei);
&amp;Eins = &amp;tmp;
</code></pre>
<p>Ich wollte aber</p>
<pre><code class="language-cpp">// Vorgang eins Wunschdenken (Symbolisch)
Eins.operator=(std::move(Drei));
</code></pre>
<p>Ich hab das mit dem Debugger mehrfach getestet. <strong>Wo liegt mein Gedankenfehler?</strong><br />
Mir geht es um keinen speziellen Fall. Ich übe einfach gerade die Umstellung auf C++11.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368079</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Tue, 26 Nov 2013 12:41:50 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Move, Copy und c&#x27;tor - Reihenfolge on Tue, 26 Nov 2013 12:07:41 GMT]]></title><description><![CDATA[<p>stefanjann schrieb:</p>
<blockquote>
<p>ich arbeite mit Visual Studio 2012.</p>
</blockquote>
<p>Warum mit so einem veralteten Compiler?</p>
<p>Schön, dass du deinen Code <strong>vollständig</strong> eingefügt hast, so kann man es ganz einfach nachvollziehen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
class A
{
public:
  A(){}
  A(const A&amp; ToCopy){}
  A(A&amp;&amp; ToMove){}
  A&amp; operator=(const A&amp; ToCopy) { Set(ToCopy); return *this;            }
  A&amp; operator=(A&amp;&amp; ToMove)      { Set(std::move(ToMove));  return *this;}
  void Set(const A&amp; ToCopy){ std::cerr &lt;&lt; &quot;Set(const A&amp; ToCopy)\n&quot;;}
  void Set(A&amp;&amp; ToMove){ std::cerr &lt;&lt; &quot;Set(A&amp;&amp; ToMove)\n&quot;; }
};

A Eins, Zwei, Drei;

Eins = std::move(Zwei);    // Vorgang eins
Eins.Set(std::move(Drei)); // Vorgang zwei
}
</code></pre>
<p>mit VS2013 gibt:</p>
<p>Set(A&amp;&amp; ToMove)<br />
Set(A&amp;&amp; ToMove)</p>
<p>was wohl deinen Erwartungen entspricht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368081</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 26 Nov 2013 12:07:41 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Move, Copy und c&#x27;tor - Reihenfolge on Tue, 26 Nov 2013 12:18:14 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>stefanjann schrieb:</p>
<blockquote>
<p>ich arbeite mit Visual Studio 2012.</p>
</blockquote>
<p>Warum mit so einem veralteten Compiler?</p>
</blockquote>
<p>Weil die Firma derzeit noch mit TFS 2012 arbeitet. Ist nicht so schnell zu machen alles auf 2013 umzustellen. Wird aber Anfang Januar in Angriff genommen. Das ist ja meine Arbeit momentan alles vorzubereiten und den Umstieg von unseren C++98 auf C++11 zu organisieren und zu planen. Sind halt schon sehr viele &quot;alte&quot; Programmierungen und Libs die portiert werden müssen.</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>Schön, dass du deinen Code <strong>vollständig</strong> eingefügt hast, so kann man es ganz einfach nachvollziehen.</p>
</blockquote>
<p>Mein Code ist derzeit über 6 Klassen in Kombination mit einigen Templates verteilt und ein bisschen rumgeerbt wird auch noch. Ich dachte, ich fasse das Grundproblem zusammen, damit man hier nicht unnötig 500 Zeilen Code lesen muss.</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>mit VS2013 gibt:</p>
<p>Set(A&amp;&amp; ToMove)<br />
Set(A&amp;&amp; ToMove)</p>
<p>was wohl deinen Erwartungen entspricht.</p>
</blockquote>
<p>Ja, das wären meine Erwartungen. Aber kann es &quot;nur&quot; an der VS-Version liegen? Oder kann das noch von z.B. Vererbungen, Templates oder anderen Dingen mit beeinflusst werden? Kann man das generell beantworten? Ich meine so typische &quot;Einsteiger-Unwissenheit&quot; bei std::move?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368084</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Tue, 26 Nov 2013 12:18:14 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Move, Copy und c&#x27;tor - Reihenfolge on Tue, 26 Nov 2013 12:26:31 GMT]]></title><description><![CDATA[<p>stefanjann schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Schön, dass du deinen Code <strong>vollständig</strong> eingefügt hast, so kann man es ganz einfach nachvollziehen.</p>
</blockquote>
<p>Mein Code ist derzeit über 6 Klassen in Kombination mit einigen Templates verteilt und ein bisschen rumgeerbt wird auch noch. Ich dachte, ich fasse das Grundproblem zusammen, damit man hier nicht unnötig 500 Zeilen Code lesen muss.</p>
</blockquote>
<p>Das ist auch gut und richtig so, aber optimalerweise solltest du ein ausführbares (oder bis auf den relevanten Fehler ausführbar) Beispiel präsentieren. Die paar Zeilen, die manni66 ergänzt hat, machen da schon den Unterschied.<br />
Siehe:<br />
<a href="http://www.c-plusplus.net/forum/304133" rel="nofollow">http://www.c-plusplus.net/forum/304133</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368085</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 26 Nov 2013 12:26:31 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Move, Copy und c&#x27;tor - Reihenfolge on Tue, 26 Nov 2013 12:30:56 GMT]]></title><description><![CDATA[<p>stefanjann schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Schön, dass du deinen Code <strong>vollständig</strong> eingefügt hast, so kann man es ganz einfach nachvollziehen.</p>
</blockquote>
<p>Mein Code ist derzeit über 6 Klassen in Kombination mit einigen Templates verteilt und ein bisschen rumgeerbt wird auch noch. Ich dachte, ich fasse das Grundproblem zusammen, damit man hier nicht unnötig 500 Zeilen Code lesen muss.</p>
</blockquote>
<p>Dein Beispiel ist nicht übersetzbar. Wenn man es übersetzbar macht, funktioniert es. Hättest du eine übersetzbare Version zusammengestellt, hättest du selber erkannt, dass dein Problem woanders liegt!</p>
<p>stefanjann schrieb:</p>
<blockquote>
<p>Ja, das wären meine Erwartungen. Aber kann es &quot;nur&quot; an der VS-Version liegen?</p>
</blockquote>
<p>Nein, VS2012 liefert das gleiche Ergebnis, was du mit meinem <strong>vollständigen</strong> Beispiel leicht selber feststellen könntest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368087</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 26 Nov 2013 12:30:56 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Move, Copy und c&#x27;tor - Reihenfolge on Tue, 26 Nov 2013 12:41:24 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke für die Hinweise. Ich werde zukünftig keinen Psycho...äh...Pseudo-Code mehr posten, sondern lauffähiges C++.</p>
<p>Ja ihr habt Recht, hätte ich den Code den ich hier geschrieben habe einmal lauffähig durchgetestet hätte ich schon gesehen, dass es doch das tut, was es soll.</p>
<p>Ich hab meinen Debugger auch noch extrem gequält und festgestellt, dass mit ein fehlendes &quot;explizit&quot; einen cast und somit einen c'tor bescherrt hat. Aber wie das manchmal so ist mit 25fachen Vererbungen über 16 Templates...sowas sucht man recht lange. Noch dazu, weil es sich gerade um Klassen handelt die irgendwann im Jahre 200 v. Chr. von irgendeinem ehemaligen Mitarbeiter erstellt wurden.</p>
<p>Peinlich, Sorry. Gelobe Besserung.<br />
Fehler gefunden und behoben und nun &quot;moved&quot; es wieder richtig.</p>
<p>Danke an alle.<br />
Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368093</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Tue, 26 Nov 2013 12:41:24 GMT</pubDate></item></channel></rss>