Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Références Circulaires et Shared Pointers | Pointeurs Partagés
Pointeurs Intelligents C++

bookRé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.cpp

main.cpp

copy
1234567891011121314151617181920212223242526
#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.

question mark

Quel problème une référence circulaire cause-t-elle dans std::shared_ptr ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 3

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Awesome!

Completion rate improved to 5.56

bookRéférences Circulaires et Shared Pointers

Glissez pour afficher le menu

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.cpp

main.cpp

copy
1234567891011121314151617181920212223242526
#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.

question mark

Quel problème une référence circulaire cause-t-elle dans std::shared_ptr ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 3
some-alt