Zirkuläre Referenzen und Shared Pointers
Beim Arbeiten mit std::shared_ptr
könnten Sie auf ein Problem stoßen, das als zirkuläre Referenz bekannt ist. Eine zirkuläre Referenz tritt auf, wenn zwei Objekte shared_ptr
-Referenzen aufeinander halten. Da shared_ptr
Referenzzählung verwendet, erreicht die Zählung niemals null, was zu einem Speicherleck führt.
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; }
Es gibt eine Möglichkeit, dieses Problem zu beheben: Sie müssen einen anderen Typ von Smart Pointer verwenden.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
What type of smart pointer should I use to fix circular references?
Can you explain how to avoid circular references with smart pointers?
Can you provide an example of fixing this issue?
Awesome!
Completion rate improved to 5.56
Zirkuläre Referenzen und Shared Pointers
Swipe um das Menü anzuzeigen
Beim Arbeiten mit std::shared_ptr
könnten Sie auf ein Problem stoßen, das als zirkuläre Referenz bekannt ist. Eine zirkuläre Referenz tritt auf, wenn zwei Objekte shared_ptr
-Referenzen aufeinander halten. Da shared_ptr
Referenzzählung verwendet, erreicht die Zählung niemals null, was zu einem Speicherleck führt.
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; }
Es gibt eine Möglichkeit, dieses Problem zu beheben: Sie müssen einen anderen Typ von Smart Pointer verwenden.
Danke für Ihr Feedback!