Definiert der Standard genau, was ich mit einem Objekt tun kann, wenn es verschoben wurde? Früher dachte ich, dass alles, was Sie mit einem verschobenen Objekt tun können, darin besteht, es zu zerstören, aber das würde nicht ausreichen.
Nehmen Sie zum Beispiel die Funktionsvorlage, swap
wie sie in der Standardbibliothek definiert ist:
template <typename T>
void swap(T& a, T& b)
{
T c = std::move(a); // line 1
a = std::move(b); // line 2: assignment to moved-from object!
b = std::move(c); // line 3: assignment to moved-from object!
}
Offensichtlich muss es möglich sein, verschobenen Objekten zuzuweisen, da sonst die Zeilen 2 und 3 fehlschlagen würden. Was kann ich sonst noch mit verschobenen Objekten tun? Wo genau finde ich diese Angaben im Standard?
(Übrigens, warum ist es T c = std::move(a);
statt T c(std::move(a));
in Zeile 1?)
pop_back
einer eingefahrenen ausvector
. Aber Sie können sicher herausfinden, ob es istempty()
.