<?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[Big Five und Copy-and-Swap in C++11]]></title><description><![CDATA[<p>Hallo zusammen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ab C++11 ruft <code>std::swap()</code> die Move- und nicht mehr die Kopieroperationen der involvierten Typen auf. Damit entfällt für Klassen mit Move-Semantik die Notwendigkeit, eine spezialisierte <code>swap()</code> -Funktion im Namensraum (und als Member) anzubieten.</p>
<p>Wenn ihr nun Klassen habt, welche die Big Five implementieren, wie vermeidet ihr Codeduplizierung? In C++98 wurde dafür das Copy-and-Swap-Idiom eingesetzt. Würdet ihr immer noch eine <code>swap()</code> -Funktion schreiben und diese in beiden Zuweisungsoperatoren aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322965/big-five-und-copy-and-swap-in-c-11</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 11:33:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322965.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Jan 2014 20:33:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Mon, 13 Jan 2014 20:33:25 GMT]]></title><description><![CDATA[<p>Hallo zusammen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ab C++11 ruft <code>std::swap()</code> die Move- und nicht mehr die Kopieroperationen der involvierten Typen auf. Damit entfällt für Klassen mit Move-Semantik die Notwendigkeit, eine spezialisierte <code>swap()</code> -Funktion im Namensraum (und als Member) anzubieten.</p>
<p>Wenn ihr nun Klassen habt, welche die Big Five implementieren, wie vermeidet ihr Codeduplizierung? In C++98 wurde dafür das Copy-and-Swap-Idiom eingesetzt. Würdet ihr immer noch eine <code>swap()</code> -Funktion schreiben und diese in beiden Zuweisungsoperatoren aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377166</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 13 Jan 2014 20:33:25 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Mon, 13 Jan 2014 21:40:59 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Würdet ihr immer noch eine <code>swap()</code> -Funktion schreiben und diese in beiden Zuweisungsoperatoren aufrufen?</p>
</blockquote>
<p>Nö, einfach das Argument per value entgegennehmen und dann den move-operator= aufrufen. Weil move quasi immer noexcept ist, geht das super.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377175</guid><dc:creator><![CDATA[swappi]]></dc:creator><pubDate>Mon, 13 Jan 2014 21:40:59 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Mon, 13 Jan 2014 22:03:32 GMT]]></title><description><![CDATA[<p>Wo würdest du das Argument per Value nehmen? Die Big Five haben eine festgelegte Signatur, die kannst du nicht einfach ändern...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377176</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 13 Jan 2014 22:03:32 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Mon, 13 Jan 2014 22:19:36 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Ab C++11 ruft <code>std::swap()</code> die Move- und nicht mehr die Kopieroperationen der involvierten Typen auf. Damit entfällt für Klassen mit Move-Semantik die Notwendigkeit, eine spezialisierte <code>swap()</code> -Funktion im Namensraum (und als Member) anzubieten.</p>
</blockquote>
<p>Eine swap-Funktion ist meiner Meinung nach immer noch sinnvoll. Siehe auch diesen sehr interessante Antwort zu Copy-and-Swap, insbesondere den C++11 Teil <a href="https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom" rel="nofollow">https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377178</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Mon, 13 Jan 2014 22:19:36 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Mon, 13 Jan 2014 22:36:38 GMT]]></title><description><![CDATA[<p>TNA schrieb:</p>
<blockquote>
<p>Eine swap-Funktion ist meiner Meinung nach immer noch sinnvoll. Siehe auch diesen sehr interessante Antwort zu Copy-and-Swap, insbesondere den C++11 Teil <a href="https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom" rel="nofollow">https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom</a></p>
</blockquote>
<p>Dabei wird der move-assignment-operator durch swap implementiert und man spart sich beim implementieren der C++11-Features viel Zeit. Per default wird std::swap durch den move-assignment-operator implementiert und wenn man den operator hat, kann man sich die swap-Methode sparen. Letztendlich läuft doch beides auf das gleiche hinaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377180</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Mon, 13 Jan 2014 22:36:38 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Mon, 13 Jan 2014 22:37:26 GMT]]></title><description><![CDATA[<p>Dort wird übrigens empfohlen, den zuweisungsoperator mit und ohne move durch folgenden Operator abzudecken:</p>
<pre><code>dumb_array&amp; operator=(dumb_array other) // (1)
{
    swap(*this, other); // (2)

    return *this;
}
</code></pre>
<p>Geht das überhaupt und ist das wirklich sinnvoll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377181</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Mon, 13 Jan 2014 22:37:26 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Mon, 13 Jan 2014 23:10:11 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wo würdest du das Argument per Value nehmen? Die Big Five haben eine festgelegte Signatur, die kannst du nicht einfach ändern...</p>
</blockquote>
<pre><code class="language-cpp">dumb_array(dumb_array&amp;&amp;) =default;
dumb_array(dumb_array const&amp;) =default;
dumb_array&amp; operator=(dumb_array&amp;&amp;) =default;
dumb_array&amp; operator=(dumb_array other) { return *this = std::move(other); }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2377183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377183</guid><dc:creator><![CDATA[swappi]]></dc:creator><pubDate>Mon, 13 Jan 2014 23:10:11 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Mon, 13 Jan 2014 23:13:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">dumb_array&amp; operator=(dumb_array&amp;&amp;) =default;
dumb_array&amp; operator=(dumb_array other) { return *this = std::move(other); }
</code></pre>
<p>Das wird dem Compiler nicht gefallen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377185</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 13 Jan 2014 23:13:48 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Mon, 13 Jan 2014 23:37:43 GMT]]></title><description><![CDATA[<p><code>=default</code> ist ohnehin keine Lösung. Das Problem ist ja gerade, dass die compilergenerierten Funktionen nicht das Richtige tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377190</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 13 Jan 2014 23:37:43 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Tue, 14 Jan 2014 09:45:08 GMT]]></title><description><![CDATA[<p>Ich kann mir vorstellen, dass es auch Fälle gibt, wo es ein eigenes swap praktischer/einfacher ist als, 1mal den Movekonstruktor und 2mal die Movezuweisung zu bemühen. In den meisten Fällen macht das aber wahrscheinlich kaum einen Unterschied.</p>
<p>Statt 5 Operationen, reichen oft auch 4 (&quot;unified assignment operator&quot;):</p>
<pre><code class="language-cpp">class indirect_int
{
    int* ptr;
public:
    indirect_int(int i=0) : ptr(new int(i)) {}

    ~indirect_int() {delete ptr;}

    int value() const {return ptr ? *ptr : 0;}
    operator int() const {return value();}

    indirect_int(indirect_int const&amp; x) : ptr(new int(x.value())) {}
    indirect_int(indirect_int     &amp;&amp; x) : ptr(x.ptr) {x.ptr = 0;}

    // &quot;unified&quot; assignment operator (copy+move)
    indirect_int&amp; operator=(indirect_int temp)
    {
       std::swap(ptr,temp.ptr);
       return *this;
    }

    // just for efficiency reasons...
    indirect_int&amp; operator=(int i)
    {
        if (!ptr)
            ptr = new int(i);
        else
            *ptr = i;
        return *this;
    }
};
</code></pre>
<p>Dass der Parameter der Zuweisungsfunktion keine Referenz ist, ist absicht. So ensteht <code>temp</code> entweder als Kopie (falls Argument ein Lvalue war) oder über den Movekonstruktor (falls Rvalue), wenn es nicht sogar ganz wegoptimiert wird (copy elision). Man spart sich etwas Tipparbeit auf kosten von einem zusätzlichen Move in einigen Fällen.</p>
<p>Mal davon abgesehen, dass die Klasse wenig sinnvoll ist, könnte man das so stehen lassen. Viel Redundanz sehe ich da jetzt nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377217</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 14 Jan 2014 09:45:08 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Tue, 14 Jan 2014 09:56:53 GMT]]></title><description><![CDATA[<blockquote>
<p>könnte man das so stehen lassen</p>
</blockquote>
<p>Ist zwar nicht Thema, aber</p>
<pre><code>int value() const {return ptr ? *ptr : 0;}
</code></pre>
<p>wuerde ich so nicht stehen lassen. Zumindest mittels assert sollte eine Exception geworfen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377219</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 14 Jan 2014 09:56:53 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Tue, 14 Jan 2014 10:11:51 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Viel Redundanz sehe ich da jetzt nicht.</p>
</blockquote>
<p>Ja, in solchen Fällen hält sich der zu duplizierende Code auch in Grenzen.</p>
<p>Ich hatte kürzlich einen Fall, da war es etwas komplizierter: Eine Klasse hält einen Container und einen Iterator -- dieser zeigt entweder auf ein Element des Containers oder auf dessen <code>end()</code> . Nun müssen natürlich sowohl Move- als auch Kopieroperationen diesen Iterator umhängen, was einige Zeilen Code erfordert.</p>
<p>Um Codeduplizierung zu vermeiden, habe ich das momentan so gelöst:</p>
<pre><code>class MyClass
{
public:
             MyClass();
             MyClass(const MyClass&amp; origin)   { adopt(origin); }
    MyClass&amp; operator=(const MyClass&amp; origin) { adopt(origin); return *this; }
             MyClass(MyClass&amp;&amp; source)        { adopt(source); }
    MyClass&amp; operator=(MyClass&amp;&amp; source)      { adopt(source); return *this; }
             ~MyClass();

private:
    template &lt;typename T&gt;
    void adopt(T&amp; source) // T&amp; == MyClass&amp; oder const MyClass&amp;
    {
        std::ptrdiff_t d = std::distance(source.c.begin(), source.itr);

        c = moveOrCopy(source.c);
        ... // kopiere/verschiebe andere Member

        itr = std::next(c.begin(), d);
    }

    Container c;
    Container::iterator itr;
    ...
};

template &lt;typename T&gt;
T moveOrCopy(T&amp; ref)
{
    return std::move(ref);
}

template &lt;typename T&gt;
T moveOrCopy(const T&amp; cref)
{
    return cref;
}
</code></pre>
<p>Ist halt nicht ganz idiomatisch, weil Member in den Konstruktoren nicht direkt initialisiert werden. Funktioniert daher auch nur, wenn Member default-konstruierbar sind... Aber immerhin vermeidet man Codeduplizierung (zumal <code>adopt()</code> beim ursprünglichen Code noch komplizierter ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377223</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 14 Jan 2014 10:11:51 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Tue, 14 Jan 2014 12:58:19 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Ist zwar nicht Thema, aber</p>
<pre><code>int value() const {return ptr ? *ptr : 0;}
</code></pre>
<p>wuerde ich so nicht stehen lassen.</p>
</blockquote>
<p>Joa, kann man sich drüber streiten, ob man das Verhalten da definieren soll oder nicht. Die std::string Implementierungen machen das wahrscheinlich ähnlich mit einem Leerstring statt 0 oder so ...</p>
<p>knivil schrieb:</p>
<blockquote>
<p>Zumindest mittels assert sollte eine Exception geworfen werden.</p>
</blockquote>
<p>Wie sieht das denn dann aus, wenn man per assert eine Ausnahme werfen will?<br />
<code>assert( bedingung ? true : (throw Ausnahme(),false) );</code><br />
<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="😉"
    /><br />
Dann sollte man aber wohl auch kein NDEBUG definieren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Nexus schrieb:</p>
<blockquote>
<p>[...] Nun müssen natürlich sowohl Move- als auch Kopieroperationen diesen Iterator umhängen, was einige Zeilen Code erfordert.</p>
</blockquote>
<p>I see.</p>
<p>Du erzeugst da mit moveOrCopy etwas Temporäres. Ist das nötig? Kannst du nicht einfach std::move statt moveOrCopy verwenden? Oder wolltest Du dem Leser deutlich machen, dass ggf doch kopiert wird? Aber dann hätte moveOrCopy trotzdem 'ne Referenz zurückgeben können. Vielleicht hätte man &quot;std::move&quot; eher &quot;std::trymove&quot; nennen sollen oder so. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377257</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 14 Jan 2014 12:58:19 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Tue, 14 Jan 2014 14:39:50 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Vielleicht hätte man &quot;std::move&quot; eher &quot;std::trymove&quot; nennen sollen oder so. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>std::move moved nichts und kopiert auch nichts. Meiner Meinung nach wäre die korrekte Bezeichnung std::rvalue_cast</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377267</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Tue, 14 Jan 2014 14:39:50 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Tue, 14 Jan 2014 14:47:41 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie sieht das denn dann aus, wenn man per assert eine Ausnahme werfen will?<br />
assert( bedingung ? true : (throw Ausnahme(),false) );</p>
</blockquote>
<p>Nee einfach nur assert:</p>
<pre><code class="language-cpp">assert( condition &amp;&amp; &quot;hey, you idiot :)&quot;)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2377269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377269</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 14 Jan 2014 14:47:41 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Tue, 14 Jan 2014 15:11:27 GMT]]></title><description><![CDATA[<p>Ausnahmen wirft man mit <code>throw</code> , knivil. Ein <code>assert(false);</code> führt zum Aufruf von <code>abort</code> , wenn man Assertions nicht deaktiviert hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377271</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 14 Jan 2014 15:11:27 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Tue, 14 Jan 2014 15:52:32 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Du erzeugst da mit moveOrCopy etwas Temporäres. Ist das nötig? Kannst du nicht einfach std::move statt moveOrCopy verwenden?</p>
</blockquote>
<p>Hm, doch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich dachte, <code>std::move()</code> würde auf konstanten Objekten nicht funktionieren. Aber anscheinend gibt es eine Const-Rvalue-Referenz zurück, welche dann indirekt vom Kopierkonstruktor angenommen wird... Danke für den Hinweis!</p>
<p>Fändest du (und andere) meine Vorgehensweise sonst okay? Oder wie würdet ihr sowas umsetzen, ohne den Code an mehreren Stellen zu haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377277</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 14 Jan 2014 15:52:32 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Tue, 14 Jan 2014 16:18:15 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Ausnahmen wirft man mit <code>throw</code> , knivil. Ein <code>assert(false);</code> führt zum Aufruf von <code>abort</code> , wenn man Assertions nicht deaktiviert hat.</p>
</blockquote>
<p>Du machst deinem Namen all Ehre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377282</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 14 Jan 2014 16:18:15 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Tue, 14 Jan 2014 18:09:34 GMT]]></title><description><![CDATA[<p>knivil, wenn du schon vom Threadthema abweichst, um im Kontext komplett irrelevante Kleinigkeiten anzumerken (so viel zu &quot;du machst dem Namen alle Ehre&quot;), dann schreib auch was Richtiges. Und wenn nicht, lass dir wenigstens Kritik gefallen.</p>
<p>Gerade da du in Wirklichkeit ja nur was gesucht hast, um die erste Version deines Posts (sinngemäss &quot;da fehlt ein Move-Assignment-Operator&quot;) zu editieren, solltest du nicht noch gross darauf rumreiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377297</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 14 Jan 2014 18:09:34 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Wed, 15 Jan 2014 04:29:13 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>Ausnahmen wirft man mit <code>throw</code> , knivil. Ein <code>assert(false);</code> führt zum Aufruf von <code>abort</code> , wenn man Assertions nicht deaktiviert hat.</p>
</blockquote>
<p>Du machst deinem Namen all Ehre.</p>
</blockquote>
<p>Ähm, bitteschön, auf Dein &quot;Zumindest mittels assert sollte eine Exception geworfen werden.&quot; sollte schon ein Einspruch kommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377343</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 15 Jan 2014 04:29:13 GMT</pubDate></item><item><title><![CDATA[Reply to Big Five und Copy-and-Swap in C++11 on Wed, 15 Jan 2014 21:27:40 GMT]]></title><description><![CDATA[<p>Hat sonst noch jemand eine Idee, wie man die Big Five mit möglichst wenig doppeltem Code umsetzt? Ich fürchte, für C++11 muss sich hier erst noch ein gängiges Idiom etablieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377510</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 15 Jan 2014 21:27:40 GMT</pubDate></item></channel></rss>