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 :
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!