Que puis-je faire avec un déplacé-de l'objet?

La norme de définir précisément ce que je peux faire avec un objet une fois qu'il a été déplacé à partir? J'ai l'habitude de penser que tout ce que vous pouvez faire avec un déplacé-de l'objet est de faire détruire, mais ce ne serait pas suffisant.

Par exemple, prenons le modèle de fonction swap 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'assigner à déplacé-à partir d'objets, sinon les lignes 2 et 3 serait un échec. Alors quoi d'autre puis-je faire avec déplacés-à partir d'objets? Exactement où puis-je trouver ces informations dans la norme?

(Au fait, pourquoi est-il T c = std::move(a); au lieu de T c(std::move(a)); dans la ligne 1?)

InformationsquelleAutor fredoverflow | 2011-08-11