Який правильний спосіб повторного використання переміщеного контейнера?
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);
З того, що я прочитав у стандартному проекті C ++ 0x; ver3 здається правильним шляхом, оскільки об'єкт після переміщення знаходиться в
"Якщо не вказано інше, такі переміщені об'єкти повинні бути переведені в дійсний, але невстановлений стан."
Я ніколи не знайшов жодного примірника, де це "вказано інакше".
Хоча я вважаю, що ver3 трохи обхідний, і я б віддав перевагу ver1, хоча vec3 може дозволити додаткову оптимізацію, але з іншого боку може легко призвести до помилок.
Чи моє припущення правильне?
clear
, оскільки він не має передумов (і, отже, не покладається на стан об’єкта).