// move constructor
ArrayWrapper (ArrayWrapper&& other)
: _p_vals(other._p_vals )
, _size(other._size)
{
other._p_vals = NULL;
other._size = 0;
}
Ich fand ein Tutorial auf Rvalue Referenzen. Ich verstehe wirklich nicht, warum wir other._p_vals = NULL;
und other._size = 0;
Der Autor erklärt gesetzt haben:rvalue Referenzen in C++
Aber warum brauchen wir other._p_vals = NULL setzen? Der Grund ist derDestruktor - wenn das temporäre Objekt außerhalb des Gültigkeitsbereichs verschwindet, wie alle anderen C++ - Objekte, wird sein Destruktor ausgeführt.
Wenn es außerhalb des Gültigkeitsbereichs geht und zerstört wird, warum other._p_vals = NULL
Einstellung plagen
Wenn seine destructor läuft, es _p_vals befreien. Die gleichen _p_vals, die wir gerade kopiert haben!
Ich dachte, wir bewegten nicht kopiert, oder ... liege ich falsch?
Wenn wir other._p_vals auf NULL gesetzt nicht , würde die Bewegung nicht wirklich eine Schachzug sein - es wäre nur eine Kopie sein, die später zu einem Absturz führt, sobald wir mit freigegebenen Speicher starten . Dies ist der springende Punkt einer Verschiebung Konstruktor: Um eine Kopie zu vermeiden, indem Sie das ursprüngliche, temporäre Objekt ändern!
Kann mir jemand helfen zu verstehen?!?
Der Destruktor würde Code haben, der etwas mit '_p_vals' tut (z. B.' lösche's). Wenn du diese Zeilen nicht hast, kopierst du und bewegst dich nicht. –