Maison > développement back-end > C++ > Comment `enable_shared_from_this` résout-il le problème de la création de `shared_ptr` sécurisés vers `this` ?

Comment `enable_shared_from_this` résout-il le problème de la création de `shared_ptr` sécurisés vers `this` ?

Barbara Streisand
Libérer: 2024-12-12 20:36:14
original
234 Les gens l'ont consulté

How Does `enable_shared_from_this` Solve the Problem of Creating Safe `shared_ptr`s to `this`?

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();
    }
};
Copier après la connexion

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
}
Copier après la connexion

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!

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