Circular 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
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.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 5.56
Circular 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
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.
Bedankt voor je feedback!