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.
War alles klar?
Danke für Ihr Feedback!
Abschnitt 3. Kapitel 3
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Abschnitt 3. Kapitel 3