Maison > développement back-end > C++ > Comment réutiliser un conteneur C déplacé ?

Comment réutiliser un conteneur C déplacé ?

Linda Hamilton
Libérer: 2024-12-04 19:58:11
original
688 Les gens l'ont consulté

How Should You Reuse a Moved C   Container?

Réutiliser un conteneur déplacé : garantir un comportement correct

Lorsqu'un conteneur est déplacé, il est placé dans un "état valide mais non spécifié" selon le projet de norme C 0x . Dans une telle situation, il est crucial de comprendre comment réutiliser correctement le conteneur déplacé.

Considérez l'extrait de code suivant :

std::vector<int> container;
container.push_back(1);
auto container2 = std::move(container);

// ver1: Do nothing
//container2.clear(); // ver2: "Reset"
container = std::vector<int>() // ver3: Reinitialize

container.push_back(2);
assert(container.size() == 1 && container.front() == 2);
Copier après la connexion

Selon la norme, l'option ver3, qui implique de réinitialiser le conteneur déplacé, est la bonne approche. En effet, après une opération de déplacement, un objet est placé dans un état non spécifié.

La norme définit un « état valide mais non spécifié » comme suit :

"un état d'objet qui n'est pas spécifié sauf que les invariants de l'objet sont satisfaits et que les opérations sur l'objet se comportent comme spécifié pour son type"

Cela signifie que l'objet déplacé reste actif et peut être utilisé, mais seulement si les conditions préalables sont remplies. Dans le cas d'un vecteur, effacer le conteneur avec clear() n'a aucune condition préalable et le ramène à un état connu.

Par conséquent, il est recommandé d'utiliser clear() pour réinitialiser un conteneur déplacé et remettez-le dans un état utilisable.

L'option ver2, qui implique d'appeler clear() sur le conteneur déplacé, est également valide. Cependant, cela peut conduire à des optimisations en supposant que le conteneur déplacé est vide. L'utilisation de clear() garantit que le conteneur revient à un état connu, quelles que soient les optimisations.

L'option ver1, qui implique de ne rien faire, n'est pas recommandée. En effet, le conteneur est dans un état non spécifié après le déplacement et peut présenter un comportement inattendu.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal