Ihr Link die möglichen Implementierungen eines Zuweisungsoperators beschreiben beschrieben class_name& class_name::operator=(class_name)
als:
Typische Deklaration einer Kopie Zuweisungsoperator, wenn copy-and-Swap-Idiom kann
Und class_name& class_name::operator=(const class_name&)
verwendet werden, wie :
Typische Deklaration eines Kopierzuweisungsoperators, wenn Copy-and-Swap-Idiom nicht verwendet werden kann
Grundsätzlich würden wir immer wollen copy-and-Swap, wenn möglich verwenden, wie sie in den excellent answer to your linked question erwähnt, weil es die Selbstzuordnung Test bestehen wird.
So, jetzt ist die Frage, warum die Konvention über http://www.cppreference.com erwähnt?
Angenommen, ich implementiere einen Kopierkonstruktor in eine virtuelle Klasse und möchte jedem, der erbt, klar machen, dass er das Copy-and-Swap-Idiom verwenden soll. Wie würde ich das tun?Ich konnte ihnen helfen, indem sie die Kopie für sie in dem ersten Aufruf zu tun:
class_name& class_name::operator=(class_name)
Dies ist eine Kopie von Wert ist, so dass die Implementierer von untergeordneten Klassen sehen würde, dass ich schon die Kopie für sie gemacht, so dass alle Sie müssen nur tauschen.
Nun, was wäre, wenn ich eine class_name
hätte, die ein Mitglied enthielt, das nicht kopiert werden konnte, zum Beispiel was, wenn meine Klasse eine unique_ptr
hat, so dass es nicht kopiert werden kann.
class_name& class_name::operator(const class_name&)
Anzeige es wird auf Implementierer von untergeordneten Klassen, um sicherzustellen, dass eine ausreichende Prüfung erfolgt passieren die Selbst: Ich kann durch nicht Erstellen einer Kopie von Wert Argument für den Zuweisungsoperator, beispielsweise zeigen, dass -Zuweisungstest.
Normalerweise ist Copy-and-Swap * einfach * und * sicher *, aber aus Geschwindigkeitsgründen vielleicht nicht optimal. Wenn Sie zum Beispiel zwei Container mit einer Million Elementen zuweisen, ist es wahrscheinlich schneller, eine Million Aufgaben zu erledigen, als eine Million Konstruktionen und eine Million Zerstörungen durchzuführen. –
@ user2079303 danke, dieser Satz war betrunken, er musste nach Hause gehen. Hoffnung jetzt ist es klarer – Darius
Fälle des wirklichen Lebens, in denen Kopie/Austausch Ihre Leistung tötet: http://stackoverflow.com/a/25942402/576911 –