Maison >développement back-end >C++ >Qu'est-ce que «enable_shared_from_this» et comment crée-t-il en toute sécurité des instances «shared_ptr» ?
Qu'est-ce que activate_shared_from_this et pourquoi est-il utile ?
Introduction
Pendant l'exploration de Boost. Comme exemples, vous pouvez rencontrer activate_shared_from_this, vous laissant perplexe quant à sa bonne application. Cet article vise à fournir une explication complète et un exemple de cas où l'utilisation de cette classe est logique.
Comprendre activate_shared_from_this
enable_shared_from_this est une classe utilitaire qui facilite la conversion d'un pointeur (comme celui-ci) dans une instance shared_ptr valide. Sans cela, accéder à un shared_ptr à l'objet actuel serait impossible à moins qu'il ne soit explicitement stocké en tant que variable membre.
Exemple et explication
Considérez l'exemple suivant :
class Y : public enable_shared_from_this<Y> { public: shared_ptr<Y> f() { return shared_from_this(); } }; 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, la méthode f() renvoie un shared_ptr valide, même si elle n'a pas d'instance membre de partagé_ptr. La classe activate_shared_from_this permet cette conversion. Il est important de noter que l'approche suivante est incorrecte :
class Y : public enable_shared_from_this<Y> { public: shared_ptr<Y> f() { return shared_ptr<Y>(this); } };
Cela entraînerait des pointeurs partagés avec des nombres de références différents, conduisant à des références potentiellement pendantes lorsque l'objet est supprimé.
Conclusion
enable_shared_from_this est un outil précieux pour créer une instance shared_ptr de l'objet actuel, lorsque vous n'avoir accès qu'à un pointeur régulier. Il évite les références pendantes et garantit une bonne gestion des ressources. Cette fonctionnalité est désormais également disponible dans le cadre de la norme C 11.
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!