Maison > développement back-end > C++ > Comment réutiliser en toute sécurité un conteneur déplacé dans C 0x ?

Comment réutiliser en toute sécurité un conteneur déplacé dans C 0x ?

DDD
Libérer: 2024-12-02 16:24:12
original
591 Les gens l'ont consulté

How to Safely Reuse a Moved Container in C  0x?

Réutilisation d'un conteneur déplacé : exploration du projet de norme C 0x

La question en question cherche à clarifier la méthode appropriée pour réutiliser un conteneur déplacé en C. Selon le projet de norme C 0x, un objet dans un « état valide mais non spécifié » permet des opérations qui ne nécessitent pas de conditions préalables à moins que ces conditions préalables ne soient d'abord vérifiées.

Considérez l'extrait de code fourni :

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
Copier après la connexion

Le conteneur vectoriel est déplacé vers le conteneur2, laissant le conteneur dans un état non spécifié. Selon la norme, cet état permet des opérations sans conditions préalables. Par conséquent, appeler clear sur conteneur2 (version 2) le ramènera à un état connu.

Alternativement, la réinitialisation du conteneur à l'aide de la version 3 permettra également d'obtenir le résultat souhaité. Cette méthode est légèrement plus détournée mais permet une optimisation potentielle. Cependant, cela peut également conduire à des erreurs.

Par conséquent, la bonne méthode pour réutiliser un conteneur déplacé est soit de l'effacer, soit de le réinitialiser. La version 2 est préférée car elle réinitialise explicitement le conteneur à un état connu et évite les pièges potentiels associés à la version 3.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal