Ich beobachtete ein Bjarne Stroustrup sprechen und die Sektion war auf Move-Betreiber und ihre Vorteile."Vererben" Move-Operatoren?
Er erwähnt here, dass eine explizite Bewegung Konstruktor wie:
Matrix(Matrix&& a)
{
rep = a.rep;
a.rep = {};
}
"C-Stil" und "kryptische".
Er fährt fort zu sagen, dass in vielen Fällen das Schreiben von Copy/Move-Operatoren vermieden werden kann; er stellt das folgende Beispiel here:
class Matrix
{
vector<double> elem;
// ... matrix access...
}
Er stellt fest, dass dieses Matrix-Klasse „erbt“ Ressourcenmanagement von Vektor und dass das Kopieren/Verschieben Bauer ist implizit es erzeugt.
Kann jemand helfen zu erklären, was er damit meint? Wie würde ich ein Matrix-Objekt nehmen und Bewegungssemantik verwenden, wenn ich keinen Bewegungsoperator für Matrix definiert hätte?
Das Grundkonzept für Move-Konstruktoren ist wie das für Kopierkonstruktoren. Wenn Ihre Membervariablen alle kopierfähig sind, ist kein benutzerdefinierter Kopierkonstruktor für die Klasse erforderlich. Das gleiche gilt für Moves. –