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
99
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#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;
}
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.
Oliko kaikki selvää?
Kiitos palautteestasi!
Osio 3. Luku 3
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme