Was ist der richtige Weg, um einen bewegten Container wiederzuverwenden?
std::vector<int> container;
container.push_back(1);
auto container2 = std::move(container);
// ver1: Do nothing
//container2.clear(); // ver2: "Reset"
container = std::vector<int>() // ver3: Reinitialize
container.push_back(2);
assert(container.size() == 1 && container.front() == 2);
Nach dem, was ich im C ++ 0x-Standardentwurf gelesen habe; ver3 scheint der richtige Weg zu sein, da sich ein Objekt nach dem Verschieben in a befindet
"Sofern nicht anders angegeben, werden solche weggezogenen Objekte in einen gültigen, aber nicht spezifizierten Zustand versetzt."
Ich habe nie einen Fall gefunden, in dem es "anders angegeben" ist.
Ich finde ver3 zwar ein bisschen umständlich und hätte ver1 sehr bevorzugt, obwohl vec3 eine zusätzliche Optimierung ermöglichen kann, aber andererseits leicht zu Fehlern führen kann.
Ist meine Annahme richtig?
clear
, da es keine Voraussetzungen hat (und somit kein Vertrauen in den Zustand des Objekts).