Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Circular References and Shared Pointers | Shared Pointers
C++ Smart Pointers

bookCircular References and Shared Pointers

When working with std::shared_ptr, you might encounter an issue known as a circular reference. A circular reference occurs when two objects hold shared_ptr references to each other. Since shared_ptr uses reference counting, the count never reaches zero, causing a memory leak.

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

There is a way to fix this issue you need to use a different type of smart pointer.

question mark

What problem does a circular reference cause in std::shared_ptr?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 5.56

bookCircular References and Shared Pointers

Veeg om het menu te tonen

When working with std::shared_ptr, you might encounter an issue known as a circular reference. A circular reference occurs when two objects hold shared_ptr references to each other. Since shared_ptr uses reference counting, the count never reaches zero, causing a memory leak.

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

There is a way to fix this issue you need to use a different type of smart pointer.

question mark

What problem does a circular reference cause in std::shared_ptr?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3
some-alt