Maison >développement back-end >C++ >Quel est l'état d'un vecteur déplacé en C ?

Quel est l'état d'un vecteur déplacé en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-23 21:42:15799parcourir

What is the State of a Moved-From Vector in C  ?

État vide des vecteurs déplacés

Dans les types de bibliothèques standard C, les objets déplacés sont généralement placés dans un état valide mais non spécifié . Cependant, il est curieux de savoir si les vecteurs relèvent explicitement de cette règle.

Comportement du constructeur de déplacement

Pour le constructeur de déplacement du vecteur, le vecteur déplacé depuis est systématiquement vide en raison de l’exigence d’une complexité constante. Le constructeur vole les ressources du vecteur source pour construire la nouvelle instance, laissant le vecteur d'origine dans un état vide.

Comportement de l'opérateur d'affectation de déplacement

Le comportement du déplacement du vecteur L'opérateur d'affectation est plus nuancé et dépend de l'allocateur :

Cas 1 : Propager l'affectation de déplacement = Vrai

Dans ce cas, le vecteur déplacé sera toujours vide. L'opérateur d'affectation détruit les éléments, libère la capacité, transfère la propriété du tampon mémoire du vecteur source et déplace les allocateurs. Cela laisse le vecteur d'origine dans un état vide.

Cas 2 : propagation de l'affectation de déplacement = faux, allocateurs égaux

Semblable au cas 1, le vecteur déplacé depuis est vidé par l’opérateur d’affectation de déplacement. Les allocateurs ne sont pas déplacés et la distinction des cas se produit de manière dynamique.

Cas 3 : propagation de l'affectation de déplacement = allocateurs faux et inégaux

Le cas le plus complexe implique différents allocateurs. Ici, l'affectation de déplacement ne peut pas déplacer de ressources ni affecter d'allocateurs. Au lieu de cela, il déplace les éléments individuels du vecteur source vers le vecteur de destination. En fonction des capacités de l'allocateur et des exigences de construction des éléments, le vecteur déplacé n'est pas nécessairement vide. Cependant, certaines implémentations peuvent choisir d'appeler explicitement clear() sur le vecteur source, en le laissant vide.

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