Comprendre l'importance de activate_shared_from_this
Question :
En explorant les exemples Boost.Asio, de nombreux développeurs rencontrent le concept activate_shared_from_this. Malgré la lecture de la documentation, son application pratique reste floue. Pourriez-vous fournir un exemple et expliquer quand l'utilisation de cette classe est appropriée ?
Réponse :
enable_shared_from_this accorde la possibilité d'obtenir une instance shared_ptr valide pour "this", même dans les situations où seul « ceci » est disponible. En l'absence de cette capacité, obtenir un shared_ptr sur "this" nécessiterait d'en avoir un déjà défini comme membre.
Considérez l'exemple suivant tiré de la documentation de Boost :
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 }
La méthode f() renvoie un shared_ptr valide malgré l'absence d'instance de membre.
Il est important de noter que le simple fait de renvoyer un shared_ptr construit avec "this" comme L'argument n'est pas une solution acceptable, car il entraînerait un décompte de références différent de celui légitime "partagé". Par conséquent, l'un des pointeurs partagés peut se retrouver avec une référence pendante lors de la suppression d'un objet.
enable_shared_from_this fait désormais partie de la norme C 11, le rendant accessible via C 11 et Boost.
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!