Как правильно повторно использовать перемещенный контейнер?
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
, поскольку он не имеет предварительных условий (и, следовательно, не зависит от состояния объекта).