Maison >développement back-end >C++ >Comment puis-je réutiliser en toute sécurité un conteneur déplacé en C ?
Déplacement de propriété et réutilisation de conteneurs en C
En C, lorsqu'un objet est déplacé (à l'aide de la fonction std::move), son la propriété est transférée à la nouvelle variable. Cela signifie que la variable d'origine devient vide et ne contient aucune donnée valide.
Une question courante qui se pose lorsque l'on travaille avec des conteneurs déplacés est de savoir comment les réutiliser. La question se pose : "Quelle est la bonne façon de réutiliser un conteneur déplacé ?"
Comprendre l'"État valide mais non spécifié"
Selon le projet de norme C 0x , un objet après son déplacement est dans un "état valide mais non spécifié". Cela signifie que l'objet répond à ses invariants, mais que son état interne n'est pas garanti d'être cohérent.
Option 1 : Ne rien faire
Une option consiste à ne rien faire et supposons que l'objet est toujours valide. Cependant, cette approche n'est pas recommandée car elle peut conduire à un comportement indéfini si l'état interne du conteneur n'est pas cohérent.
Option 2 : "Réinitialiser" avec clear
Une autre L'option consiste à utiliser la méthode clear pour "réinitialiser" le conteneur et le rendre vide. Cette approche garantit que l'état interne du conteneur est cohérent et permet de le réutiliser en toute sécurité.
Option 3 : Réinitialiser avec le constructeur par défaut
Une dernière option consiste simplement à réinitialiser le conteneur en utilisant son constructeur par défaut. Cette approche garantit également que l'état interne du conteneur est cohérent et peut être réutilisé.
Approche préférée
L'approche préférée pour réutiliser un conteneur déplacé consiste à utiliser la méthode clear . Cette approche est à la fois sûre et efficace, et évite les pièges potentiels associés aux autres options.
Exemple
Considérez le code suivant :
std::vector<int> container; container.push_back(1); auto container2 = std::move(container); //container2.clear(); Reset container = std::vector<int>(); // Reinitialize container.push_back(2); assert(container.size() == 1 && container.front() == 2);
En utilisant la méthode clear pour réinitialiser le conteneur2, nous garantissons que son état interne est cohérent et peut être réutilisé en toute sécurité. En conséquence, l'opération push_back suivante ajoute correctement un nouvel élément au conteneur.
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!