Kursinhalt
C++ Smart Pointers
C++ Smart Pointers
1. Einführung in Smart Pointers
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
#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