Jaki jest prawidłowy sposób ponownego wykorzystania przeniesionego kontenera?
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);
Z tego, co przeczytałem w wersji roboczej standardu C ++ 0x; ver3 wydaje się być poprawnym sposobem, ponieważ obiekt po przeniesieniu jest w formacie
„O ile nie określono inaczej, takie przeniesione przedmioty powinny być umieszczone w stanie ważnym, ale nieokreślonym”.
Nigdy nie znalazłem żadnego przypadku, w którym jest to „określone inaczej”.
Chociaż uważam, że ver3 jest nieco okrężna i miałbym znacznie preferowaną wersję ver1, chociaż vec3 może pozwolić na dodatkową optymalizację, ale z drugiej strony może łatwo prowadzić do błędów.
Czy moje założenie jest prawidłowe?
clear
, ponieważ nie ma warunków wstępnych (a zatem nie ma zależności od stanu obiektu).