État valide des objets « déplacés de » en C 11
Question :
Dans C 11, lorsqu'un objet est déplacé, il entre dans un état non spécifié. Quelles conditions un tel objet « déplacé de » doit-il satisfaire pour rester valide ?
Réponse :
La validité d'un objet déplacé de est définie par la spécification du type et documentation.
Pour les types de bibliothèques standard, les objets déplacés sont placés dans un état non spécifié mais valide, ce qui signifie qu'ils répondent à toutes les exigences standard pour le type, sauf indication contraire. Les utilisateurs doivent interroger l'état pour déterminer les opérations valides.
Pour les types définis par le développeur, vous définissez et documentez ce qui constitue un état valide et les opérations autorisées pour les objets déplacés.
Dans le contexte de l'exemple d'idiome pimpl fourni :
class Foo { std::unique_ptr<FooImpl> impl_; };
Vous pouvez spécifier que le déplacement à partir d'un objet Foo invalide l'opération do_stuff, ce qui en fait un comportement indéfini. Ceci est raisonnable car le déplacement implique qu'aucune autre opération ne peut être effectuée sur l'objet déplacé.
Alternativement, vous pouvez définir un état spécifique pour les objets Foo déplacés, en vous assurant que les exigences conceptuelles de la bibliothèque standard sont toujours rencontré. Cela vous permettrait d'utiliser des objets Foo déplacés avec la bibliothèque standard sans comportement non défini.
Notez que les concepts de bibliothèque standard ne prennent pas en compte les objets déplacés. Par conséquent, si les objets déplacés ne restent pas dans un état valide selon le concept pertinent, leur utilisation avec la bibliothèque standard entraînera un comportement indéfini.
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!