shared_ptr循环引用举例
时间: 2023-08-30 22:09:17 浏览: 97
假设有两个类A和B,类A有一个指向类B的shared_ptr,而类B也有一个指向类A的shared_ptr,这就形成了循环引用。
示例代码:
```cpp
class B;
class A {
public:
shared_ptr<B> b_ptr;
};
class B {
public:
shared_ptr<A> a_ptr;
};
int main() {
shared_ptr<A> a = make_shared<A>();
shared_ptr<B> b = make_shared<B>();
a->b_ptr = b;
b->a_ptr = a;
return 0;
}
```
在这个例子中,当a和b的引用计数都变为0时,它们所指向的对象将不会被销毁,从而导致内存泄漏。
为了避免这种情况,可以使用weak_ptr来打破循环引用,例如:
```cpp
class B;
class A {
public:
weak_ptr<B> b_ptr;
};
class B {
public:
weak_ptr<A> a_ptr;
};
int main() {
shared_ptr<A> a = make_shared<A>();
shared_ptr<B> b = make_shared<B>();
a->b_ptr = b;
b->a_ptr = a;
return 0;
}
```
这样当a和b的引用计数都变为0时,它们所指向的对象将会被正确地销毁。
阅读全文