Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Zirkuläre Referenzen und Shared Pointers | Gemeinsame Zeiger
C++ Smart Pointers

bookZirkulä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

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; }

Es gibt eine Möglichkeit, dieses Problem zu beheben: Sie müssen einen anderen Typ von Smart Pointer verwenden.

question mark

Welches Problem verursacht ein Zirkulärverweis in std::shared_ptr?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 3

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 5.56

bookZirkulä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

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; }

Es gibt eine Möglichkeit, dieses Problem zu beheben: Sie müssen einen anderen Typ von Smart Pointer verwenden.

question mark

Welches Problem verursacht ein Zirkulärverweis in std::shared_ptr?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 3
some-alt