Comprendre le rôle de activate_shared_from_this
Le concept d'enable_shared_from_this laisse souvent les programmeurs perplexes, et la documentation peut être tout aussi déroutante. Cet article a pour objectif de faire la lumière sur le but et le bon usage de cette classe à l'aide d'exemples concrets.
Que fait activate_shared_from_this ?
enable_shared_from_this permet de créer une instance shared_ptr pointant vers l'objet actuel ("this") lorsque vous n'avez qu'un pointeur brut. Cette fonctionnalité est essentielle pour certains scénarios où vous devez conserver une propriété partagée de l'objet.
Un exemple illustratif :
Considérez la classe Y suivante qui dérive de activate_shared_from_this< ;Y>:
class Y : public enable_shared_from_this<Y> { public: shared_ptr<Y> f() { return shared_from_this(); } };
Dans la méthode f, nous pouvons renvoyer un shared_ptr valide même si la classe n’a aucune instance membre. Explorons cela plus en détail :
int main() { shared_ptr<Y> p(new Y); shared_ptr<Y> q = p->f(); assert(p == q); assert(!(p < q || q < p)); // p and q must share ownership }
Dans cet exemple, p est le shared_ptr original pointant vers l'objet. Lorsque nous appelons p->f(), nous obtenons un autre shared_ptr (q) qui partage la propriété avec p. L'assertion p == q vérifie qu'ils font référence au même objet, et la deuxième assertion garantit qu'ils n'ont pas de valeurs différentes (p et q doivent toujours maintenir des nombres de références égaux).
Importance d'utilisation correcte :
Il est crucial de souligner que la simple création d'un shared_ptr en utilisant this (sans activate_shared_from_this) entraînera une référence incorrecte compter. Par conséquent, l'utilisation de activate_shared_from_this garantit la bonne gestion de la propriété partagée.
Disponibilité :
enable_shared_from_this est disponible à la fois dans Boost et dans la norme C 11. Vous pouvez utiliser l'une ou l'autre de ces implémentations en fonction de vos besoins.
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!