¿Cuál es la forma correcta de reutilizar un contenedor movido?
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);
Por lo que he leído en el borrador estándar C ++ 0x; ver3 parece ser la forma correcta, ya que un objeto después del movimiento está en un
"A menos que se especifique lo contrario, dichos objetos de origen se colocarán en un estado válido pero no especificado".
Nunca he encontrado ninguna instancia donde esté "especificado de otra manera".
Aunque encuentro ver3 un poco indirecto y preferiría ver1 mucho, aunque vec3 puede permitir alguna optimización adicional, pero por otro lado puede conducir fácilmente a errores.
¿Es correcta mi suposición?
clear
, ya que no tiene condiciones previas (y, por lo tanto, no depende del estado del objeto).