Maison >développement back-end >C++ >Comment réutiliser correctement les conteneurs déplacés en C ?

Comment réutiliser correctement les conteneurs déplacés en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-03 02:42:10568parcourir

How Should You Properly Reuse Moved Containers in C  ?

Réutilisation des conteneurs déplacés : la bonne approche

Le sujet de la réutilisation des conteneurs déplacés en C a suscité des discussions. Cet article explore la méthode correcte pour gérer de telles situations.

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);

Selon le projet de norme C 0x, la version 3 semble être l'approche privilégiée depuis un déplacement l'objet réside dans "un état valide mais non spécifié". Pour clarifier ce concept, référons-nous à la définition de la norme :

[defns.valid]
§17.3.26     valid but unspecified state

an object state that is not specified except that the object’s invariants are met and operations on the object behave as specified for its type

Cela signifie que l'objet déplacé est toujours vivant et peut être opéré comme d'habitude, à l'exclusion des actions avec préconditions (sauf si la précondition est vérifiée au préalable).

Par exemple, l'opération clear() n'a aucune condition préalable. En utilisant clear(), le conteneur est réinitialisé à un état défini, permettant son utilisation ultérieure.

Par conséquent, la bonne façon de réutiliser un conteneur déplacé est d'effectuer une opération clear(), comme démontré dans la version 2 de l'extrait de code. Cette approche garantit que le conteneur est restauré dans un état connu et cohérent.

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