Die Frage ist, wie mein Titel sagt.Wird ein Standard-Move-Konstruktor vom Benutzer deklariert?
Ich frage, weil ich eine Klasse mit einem notleidenden bewegen Konstruktor aber Code versucht Kopie Zuordnung auszuführen versagt die besagt, dass der Kopierzuweisungsoperator ist gelöscht (nach Visual Studio 2015).
So überprüfte ich die Regeln here für implizit deklariert Kopie Zuweisungsoperatoren:
Die implizit deklarierte oder notleidenden Kopie Zuweisungsoperator für die Klasse T ist in einem der folgenden als gelöscht definiert ist wahr:
- ...
- T hat eine benutzer erklärt Bewegung Konstruktor
- T hat ein benutzer erklärt Umzug Zuweisungsoperator
Also im Grunde bin ich, wenn ein vorbelegt bewegen Konstruktor zählt als benutzer erklärt nicht sicher. Mein Bauchgefühl sagt mir ja, aber wenn es um Standard geht, möchte ich immer sicher sein, da Annahmen teuer sein können.
Ja – Praetorian
@Praetorian Fair genug. Warum beschweren sich VS2015? Wenn ich meinen Standard-Move-Konstruktor entferne, wird Code kompiliert. –
Vermutlich enthält Ihre Klasse Datenelemente, die alle kopierbar sind. Wenn Sie den vom Benutzer deklarierten Move-Konstruktor entfernen, gibt es nichts, was die implizite Deklaration eines Kopierzuweisungsoperators – Praetorian