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!