Warum sollte ich move constructor löschen und den Zuweisungsoperator in einem Singleton verschieben?

8

Ich habe die folgende Implementierung der Singleton-Richtlinienklasse:

%Vor%

was ich dann über das seltsam wiederkehrende Vorlagenmuster (CRTP)

verwende %Vor%

Ich kann nicht herausfinden, warum ich den Verschiebungskonstruktor und den Zuweisungsoperator löschen sollte. Kannst du mir ein einziges Beispiel geben, wo ich am Ende den Singleton zerbringe, wenn ich den Verschiebe-Operator und den Zuweisungsoperator nicht lösche (nicht definiere)?

    
vsoftco 20.05.2014, 22:43
quelle

1 Antwort

20

Wenn Sie einen Kopierkonstruktor deklarieren (auch wenn Sie ihn in der Deklaration als delete d definieren), wird implizit kein Bewegungskonstruktor deklariert. Vgl. C ++ 11 12.8 / 9:

  

Wenn die Definition einer Klasse X nicht explizit einen Move-Konstruktor deklariert, wird einer implizit genau dann als defaulted deklariert, wenn

     

- X hat keinen vom Benutzer deklarierten Kopierkonstruktor,

     

- ...

Da Sie einen von Benutzern deklarierten Kopierkonstruktor haben, wird es überhaupt keinen Verschiebungskonstruktor geben, wenn Sie keinen deklarieren. Sie können also die Deklarationsdefinition des Bewegungskonstruktors vollständig loswerden. Dasselbe gilt für den Zuweisungsoperator.

    
Kerrek SB 20.05.2014, 22:48
quelle