Maison > développement back-end > C++ > Comment éviter les dépendances circulaires lors de l'utilisation de std::shared_ptr de \'this\' ?

Comment éviter les dépendances circulaires lors de l'utilisation de std::shared_ptr de \'this\' ?

Linda Hamilton
Libérer: 2024-10-29 04:43:29
original
581 Les gens l'ont consulté

How to Prevent Circular Dependencies When Using std::shared_ptr of

std::shared_ptr de "this": Comprendre les dépendances circulaires

Hériter de std::enable_shared_from_this est la clé pour résoudre le "std ::shared_ptr de cette" énigme. En activant cela, vous pouvez invoquer .shared_from_this() pour obtenir un pointeur partagé vers l'objet actuel. Cependant, cela introduit une dépendance circulaire potentielle entre les objets parent et enfant.

Pour résoudre ce problème, il est recommandé d'utiliser std::weak_ptr pour la référence de l'enfant au parent. Cela empêche la formation de références circulaires fortes et protège contre les fuites de ressources. Le code modifié montre comment implémenter cette approche :

<br>class A : public std::enable_shared_from_this<a> {<br>public:</a></p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">void addChild(std::shared_ptr<B> child) {
    children.push_back(child);
    child->setParent(shared_from_this());
}
Copier après la connexion

private :

std::list<std::weak_ptr<B>> children;
Copier après la connexion

};

classe B {
public :

void setParent(std::shared_ptr<A> parent) {
    this->parent = parent;
}
Copier après la connexion

privé :

std::shared_ptr<A> parent;
Copier après la connexion

};

Il est important de noter que l'invocation de .shared_from_this() nécessite que l'objet actuel soit géré par std::shared_ptr au moment de l'appel. Cela implique que la création de tels objets sur la pile n'est plus possible et qu'appeler .shared_from_this() à partir d'un constructeur ou d'un destructeur n'est généralement pas recommandé.

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
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal