Contenu du cours
Pointeurs Intelligents C++
Pointeurs Intelligents C++
1. Introduction aux Pointeurs Intelligents
Références Circulaires et Shared Pointers
Lorsque vous travaillez avec std::shared_ptr
, vous pourriez rencontrer un problème connu sous le nom de référence circulaire. Une référence circulaire se produit lorsque deux objets détiennent des références shared_ptr
l'un à l'autre. Étant donné que shared_ptr
utilise le comptage de références, le compte n'atteint jamais zéro, provoquant une fuite de mémoire.
main
#include <iostream> #include <memory> class B; // Forward declaration class A { public: std::shared_ptr<B> p_b; ~A() { std::cout << "A destroyed\n"; } }; class B { public: ~B() { std::cout << "B destroyed\n"; } std::shared_ptr<A> p_a; }; int main() { std::shared_ptr<A> a = std::make_shared<A>(); std::shared_ptr<B> b = std::make_shared<B>(); a->p_b = b; b->p_a = a; }
Il existe un moyen de résoudre ce problème, vous devez utiliser un type différent de smart pointer.
Tout était clair ?
Merci pour vos commentaires !
Section 3. Chapitre 3