Maison > Article > développement back-end > Pourquoi « shared_from_this » ne peut-il pas être utilisé dans un constructeur ?
shared_from_this Limitation du constructeur : explication technique
Contrairement aux idées fausses courantes, l'incapacité de shared_from_this à être utilisé dans un constructeur découle de limitations techniques. Pour comprendre pourquoi, nous examinons les aspects internes de son implémentation.
shared_from_this s'appuie sur un membre privé de la classe de base, activate_shared_from_this, pour stocker un faible_ptr. Cependant, ce low_ptr n’est initialisé qu’à la toute fin du processus de construction. Cela signifie que lorsque le constructeur de la classe dérivée (par exemple, Person) est en cours d'exécution, il n'y a pas encore shared_ptr pointant vers l'objet.
Pour illustrer cela, considérons l'extrait de code du livre :
class Person : public std::enable_shared_from_this<Person> { ... };
La fonction shared_from_this dans la classe Person tenterait d'initialiser le faible_ptr caché en utilisant le premier shared_ptr qui pointe vers un objet de type Personne. Cependant, comme le constructeur de Person est actuellement en cours d'exécution, aucun shared_ptr n'existe.
Cette restriction technique survient car le constructeur de shared_ptr doit être appelé avant qu'une action ne soit entreprise sur l'objet pointé. Par conséquent, le mécanisme shared_from_this ne peut pas fonctionner au sein du constructeur de la classe dérivée, car il n'y a pas de shared_ptr disponible à ce stade.
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!