O padrão define precisamente o que posso fazer com um objeto depois que ele foi movido? Eu costumava pensar que tudo o que você pode fazer com um objeto movido é destruí-lo, mas isso não seria suficiente.
Por exemplo, considere o modelo de função swap
conforme definido na biblioteca padrão:
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, deve ser possível atribuir a objetos movidos, caso contrário as linhas 2 e 3 falharão. Então, o que mais posso fazer com objetos movidos de? Onde exatamente posso encontrar esses detalhes no padrão?
(A propósito, por que está em T c = std::move(a);
vez da T c(std::move(a));
linha 1?)
pop_back
mudar devector
. Mas você certamente pode descobrir se éempty()
.