Повторное использование перемещенного контейнера?

Каков правильный способ повторного использования перемещенного контейнера?

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 может позволить некоторую дополнительную оптимизацию, но с другой стороны может легко привести к ошибкам.

Верно ли мое предположение?

78
задан bitek 15 March 2013 в 13:24
поделиться