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.cpp
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.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Génial!
Completion taux amélioré à 5.56
Ré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
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.
Merci pour vos commentaires !