Maison >développement back-end >C++ >Comment éviter les dépendances circulaires lors de l'utilisation de std::shared_ptr de \'this\' ?
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> <pre class="brush:php;toolbar:false">void addChild(std::shared_ptr<B> child) { children.push_back(child); child->setParent(shared_from_this()); }
private :
std::list<std::weak_ptr<B>> children;
};
classe B {
public :
void setParent(std::shared_ptr<A> parent) { this->parent = parent; }
privé :
std::shared_ptr<A> parent;
};
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!