O que posso fazer com um objeto movido de
O padrão define com precisão o que posso fazer com um objeto depois que ele foi movido? Eu costumava pensar que tudo que você pode fazer com um objeto movido é destruí-lo, mas isso não seria suficient
Por exemplo, considere o modelo de funçãoswap
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 éT c = std::move(a);
ao invés deT c(std::move(a));
na linha 1?)