Maison >développement back-end >C++ >Quelles sont la validité et les opérations autorisées sur les objets déplacés en C 11 ?

Quelles sont la validité et les opérations autorisées sur les objets déplacés en C 11 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-06 09:34:12483parcourir

What are the Validity and Allowable Operations on Moved-From Objects in C  11?

Validité des objets déplacés en C 11

Comprendre la validité des objets déplacés en C 11 peut être complexe. Cet article vise à clarifier le concept, notamment dans le contexte des objets Pimpl.

Objets déplacés de

Lorsqu'un objet est déplacé, son état devient indéterminé. La bibliothèque standard définit les critères de validité pour les types de bibliothèques standard, garantissant que les objets déplacés sont placés dans un état valide mais non spécifié. Cependant, pour les types personnalisés, il est de la responsabilité du développeur de définir et de documenter l'état valide et les opérations autorisées pour les objets déplacés.

Exemple : Pimpl Idiom

Dans Dans l'exemple d'idiome pimpl, le membre impl_ pointe vers une allocation dynamique. Après une opération de déplacement, le pointeur dans l’objet déplacé est défini sur nullptr. Cela rend la méthode do_stuff() invalide, car elle tente de déréférencer le pointeur impl_.

Invariant vs. État valide

L'invariant selon lequel un objet Foo peut toujours faire_stuff () n'est plus valide après avoir été déplacé. En général, les objets déplacés peuvent ne pas satisfaire tous les invariants qui s'appliquent à leurs homologues non déplacés.

Option 1 : opération vérifiée

Une option consiste à vérifier explicitement si le pointeur impl_ est nullptr dans do_stuff() et initialisez-le si nécessaire. Cependant, cela introduit une surcharge potentielle en termes de performances.

Option 2 : Définir un état invalide

Alternativement, le code peut définir explicitement que les objets Foo déplacés sont dans un état invalide. state et que l'appel de do_stuff() sur eux entraînera une erreur.

Concepts et Moved-From Objets

Il est important de noter que les concepts définis par la bibliothèque standard ne prennent pas en compte les objets déplacés. Pour répondre aux exigences des concepts, les objets déplacés de types personnalisés doivent toujours répondre aux exigences du concept.

Conclusion

Comprendre la validité des objets déplacés est crucial pour implémenter correctement la sémantique de déplacement. Les développeurs doivent examiner attentivement les implications des opérations de déplacement sur l'état de leurs objets et définir le comportement attendu en conséquence.

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