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.
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%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.
(Teilantwort - Beantworten des Bits über move
ing bool
)
cppreference.com hat Folgendes über std::move
:
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.
Tags und Links c++ c++11 move-semantics