Maison > Article > développement back-end > Pourquoi ne pouvez-vous pas utiliser « shared_from_this » dans un constructeur ?
Comprendre l'incapacité de Shared_from_this dans les constructeurs
La requête se concentre sur les limitations de l'utilisation de shared_from_this dans un constructeur de classe. Pour résoudre ce problème, explorons les raisons techniques derrière cette restriction.
Le membre caché de Shared_ptr
Shared_from_this est auto-référentiel, s'appuyant sur un membre low_ptr interne ajouté au activate_shared_from_this classe de base. Cependant, ce low_ptr n'est défini qu'après la création du premier shared_ptr to Person.
Chronologie de la construction
Un constructeur de classe est responsable de l'initialisation de ses membres, y compris de la construction du activate_shared_from_this instance de classe de base. Lors de la construction initiale de l'objet, il n'y a pas encore de shared_ptr pointant vers la personne.
La connexion entre Shared_ptr et Weak_ptr
Considérez l'extrait suivant :
std::shared_ptr<Person> p(new Person());
Avant que le constructeur de p (le shared_ptr) ne soit invoqué, l'expression new Person() doit être évalué, conduisant à la construction de l’objet Person. Étant donné que le constructeur de shared_ptr s'exécute après la création de l'objet Person, l'objet shared_ptr n'existe pas pendant la phase de construction de Person, ce qui rend l'utilisation de shared_from_this impossible.
Conclusion
Techniquement , shared_from_this est inutilisable dans un constructeur car le shared_ptr requis, qui initialise le low_ptr interne, le fait n'existe pas tant que l'objet n'est pas entièrement construit. Cela empêche shared_from_this d'établir la connexion auto-référentielle nécessaire.
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!