Konstruktor bewegen, Vektor mit std :: move zwischen zwei Objekten verschieben

8

Ich habe ein Objekt wie das Folgende und ich versuche, einen Move-Konstruktor zu implementieren, damit Sie eine Einfügung für std::vector<Mesh> haben können.

%Vor%

Ist das der richtige Weg? Und wenn ja, was ist der Wert von other.Valid, nachdem std :: move darauf angewendet wurde?

Bearbeiten:

Wenn ich eine Instanz dieses Objekts habe, muss ich dann im folgenden Szenario std :: move verwenden?

%Vor%     
NtscCobalt 09.02.2013, 01:38
quelle

2 Antworten

9

Sie sollten Ihren Bewegungskonstruktor wie folgt schreiben:

%Vor%

Der Nachteil der Zuweisung innerhalb des Konstruktor-Körpers gegenüber der Verwendung der Konstruktor-Initialisiererliste besteht darin, dass im ersten Fall die Mitgliedsobjekte des Mesh -Objekts, an das Sie sich bewegen, standardmäßig konstruiert und dann innerhalb des Körpers zugewiesen werden . Im letzteren Fall werden sie direkt aus dem Ergebnis des Aufrufs std::move erstellt.

Sie sollten nicht von einem Objekt lesen, sei es ein ganzzahliger Typ oder ein komplexeres Objekt, nachdem Sie es verschoben haben. Solche Objekte existieren in einem nicht spezifizierten Zustand.

    
Praetorian 09.02.2013, 01:57
quelle
3

(Teilantwort - Beantworten des Bits über move ing bool )

cppreference.com hat Folgendes über std::move :

zu sagen
  

Der Bibliothekscode muss einen gültigen Wert im Argument hinterlassen,   aber wenn der Typ oder die Funktion nichts anderes dokumentiert, gibt es keine   andere Einschränkungen für den resultierenden Argumentwert. Das bedeutet, dass   Im Allgemeinen ist es am besten, ein verschobenes from-Argument nicht zu verwenden.

Sie können sich also nicht darauf verlassen, dass bool entweder true oder false nach move ist.

    
us2012 09.02.2013 01:56
quelle

Tags und Links