Maison >développement back-end >C++ >Un « std :: vector » déplacé depuis est-il toujours vide ?

Un « std :: vector » déplacé depuis est-il toujours vide ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-18 03:36:02911parcourir

Is a Moved-From `std::vector` Always Empty?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn