Maison > développement back-end > C++ > Pourquoi `shared_from_this()` ne peut-il pas être utilisé directement dans les constructeurs ?

Pourquoi `shared_from_this()` ne peut-il pas être utilisé directement dans les constructeurs ?

Patricia Arquette
Libérer: 2024-11-05 21:00:04
original
408 Les gens l'ont consulté

Why Can't `shared_from_this()` Be Used Directly in Constructors?

Comprendre les limites de shared_from_this() dans les constructeurs

Le concept de shared_from_this() peut sembler pratique pour établir des pointeurs partagés vers un objet depuis au sein de son constructeur. Cependant, cela pose une limitation technique qui empêche son utilisation directe. Pour comprendre le problème, explorons le mécanisme sous-jacent :

Le puzzle : partage_ptr auto-stocké et timing de construction

Selon la référence du livre, le shared_ptr est stocké dans un membre privé de activate_shared_from_this<> au sein de la classe de base de la personne. La confusion vient de deux points clés :

  • shared_ptr auto-stockage : Le shared_ptr stocké est le shared_ptr réel créé en dehors de la classe.
  • Calendrier de construction : Le stockage du shared_ptr a lieu à la fin du processus de construction de la personne.

Pourquoi shared_from_this() est-il restreint dans les constructeurs ?

La limitation de shared_from_this() dans les constructeurs est due à la nature séquentielle de la construction. Pendant l'exécution du constructeur de Person, aucun shared_ptr n'a encore été créé qui pourrait pointer vers l'objet Person. Le shared_ptr est créé en externe, après la construction de Person.

Mécanisme sous-jacent de shared_from_this()

enable_shared_from_this<> fournit un moyen d'établir un faible_ptr caché dans l'objet. Ce faible_ptr est ensuite utilisé par le premier shared_ptr créé en dehors de l'objet pour s'initialiser. Cependant, cette initialisation ne se produit que lorsqu'un shared_ptr est créé en externe.

Conclusion

Bien que shared_from_this() permette la création de pointeurs partagés vers des objets extérieurs à leur classe, son l'utilisation au sein du constructeur est limitée par la séquence de construction. Le shared_ptr doit être créé en externe, une fois la construction de l'objet terminée. Il s'agit d'une limitation technique qui garantit le bon fonctionnement des pointeurs partagés.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal