¿El estándar define con precisión lo que puedo hacer con un objeto una vez que se ha movido? Solía pensar que todo lo que puedes hacer con un objeto movido es destruirlo, pero eso no sería suficiente.
Por ejemplo, tome la plantilla de función swap
como se define en la biblioteca estándar:
template <typename T>
void swap(T& a, T& b)
{
T c = std::move(a); // line 1
a = std::move(b); // line 2: assignment to moved-from object!
b = std::move(c); // line 3: assignment to moved-from object!
}
Obviamente, debe ser posible asignar a objetos movidos, de lo contrario las líneas 2 y 3 fallarían. Entonces, ¿qué más puedo hacer con los objetos movidos? ¿Dónde puedo encontrar exactamente estos detalles en el estándar?
(Por cierto, ¿por qué está en T c = std::move(a);
lugar de T c(std::move(a));
en la línea 1?)
pop_back
un traslado desdevector
. Pero ciertamente puedes averiguar si es asíempty()
.