Maison >développement back-end >C++ >Un « std :: vector » déplacé depuis est-il toujours vide ?
Un vecteur déplacé depuis est-il toujours vide ?
Déplacer des objets en C les laisse dans un état non spécifié. Bien qu'il n'y ait pas d'exclusion explicite pour les vecteurs dans cette règle, trouver une implémentation réalisable qui n'entraînerait pas un vecteur vide peut être difficile.
Constructeur de déplacement
Le Le constructeur de déplacement pour les vecteurs doit avoir une complexité constante. Cela nécessite de voler les ressources du vecteur déplacé, en le laissant vide. Par conséquent, pour le constructeur de déplacement, le vecteur déplacé depuis est toujours vide.
Opérateur d'affectation de déplacement
Le comportement de l'opérateur d'affectation de déplacement dépend de l'allocateur du vecteur. Il existe trois cas principaux :
Cas 1 :
Propagate_on_container_move_assignment est vrai.
Dans ce cas, la destruction, la désallocation, le mouvement de l'allocateur et le transfert de la mémoire tampon se produisent , laissant le vecteur déplacé depuis vide.
Cas 2 :
Propagate_on_container_move_assignment est faux, mais les allocateurs sont égaux.
Semblable au cas 1, le vecteur déplacé est du vecteur est vidé.
Cas 3 :
Propagate_on_container_move_assignment est faux et les répartiteurs sont inégaux.
Il est impossible de transférer des ressources directement. Au lieu de cela, les éléments doivent être déplacés individuellement. Si le vecteur déplacé contient des éléments sans constructeurs de déplacement, il restera non vide. Cependant, l'implémentation pourrait éventuellement appeler v.clear() pour le vider, bien que cela ne soit pas requis par la norme.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!