La norme définit-elle précisément ce que je peux faire avec un objet une fois qu'il a été déplacé? J'avais l'habitude de penser que tout ce que vous pouvez faire avec un objet déplacé est de le détruire, mais cela ne serait pas suffisant.
Par exemple, prenez le modèle de swap
fonction tel que défini dans la bibliothèque standard:
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!
}
Évidemment, il doit être possible d'affecter des objets déplacés, sinon les lignes 2 et 3 échoueraient. Alors, que puis-je faire d'autre avec des objets déplacés? Où puis-je trouver exactement ces détails dans la norme?
(Au fait, pourquoi est-ce T c = std::move(a);
au lieu de la T c(std::move(a));
ligne 1?)
pop_back
un fichier déplacévector
. Mais vous pouvez certainement savoir si c'est le casempty()
.