Course Content
C++ Smart Pointers
C++ Smart Pointers
1. Introduction to Smart Pointers
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
#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.
Everything was clear?
Thanks for your feedback!
Section 3. Chapter 3