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.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 5.56
Circular References and Shared Pointers
Svep för att visa menyn
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.
Tack för dina kommentarer!