Maison > développement back-end > C++ > Comment `enable_shared_from_this` résout-il les problèmes de propriété de pointeurs partagés en C ?

Comment `enable_shared_from_this` résout-il les problèmes de propriété de pointeurs partagés en C ?

Patricia Arquette
Libérer: 2024-12-15 04:52:34
original
684 Les gens l'ont consulté

How Does `enable_shared_from_this` Solve Shared Pointer Ownership Issues in C  ?

Comment activate_shared_from_this aide-t-il à conserver la propriété des objets ?

En explorant les exemples Boost.Asio, vous avez peut-être rencontré activate_shared_from_this. Malgré la référence à la documentation, son utilisation reste floue. Voici une explication complète et un exemple pour clarifier son objectif.

enable_shared_from_this vous permet de créer une instance shared_ptr valide pour l'objet lorsque vous n'avez accès qu'à l'objet lui-même (représenté par ceci). Sans cela, obtenir un shared_ptr pour cela serait impossible à moins qu'il ne soit déjà défini en tant que membre.

Considérez l'exemple suivant :

class Y: public enable_shared_from_this<Y>
{
public:

    shared_ptr<Y> f()
    {
        return shared_from_this();
    }
};
Copier après la connexion

Ici, la méthode f() peut renvoyer un valide shared_ptr, même s'il lui manque une instance membre. Notez que l'approche suivante échouerait :

class Y: public enable_shared_from_this<Y>
{
public:

    shared_ptr<Y> f()
    {
        return shared_ptr<Y>(this);
    }
};
Copier après la connexion

Le résultat serait deux shared_ptrs avec des nombres de références différents. Lorsque l'objet est supprimé, l'un d'entre eux deviendra une référence pendante.

Il est important de noter que activate_shared_from_this fait désormais partie du standard C 11, le rendant accessible depuis là ainsi que depuis 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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal