举例说明shared_pt循环引用
时间: 2023-09-04 22:09:26 浏览: 91
shared_ptr线程安全性全面分析
循环引用是指两个或多个对象之间互相持有对方的引用,导致它们在内存中无法被释放。shared_ptr 是 C++11 新增的智能指针,它可以用于管理动态分配的内存,避免内存泄漏。但是,在使用 shared_ptr 时,如果存在循环引用,就会导致内存泄漏。
以下是一个 shared_ptr 循环引用的示例:
```c++
#include <memory>
#include <iostream>
class B;
class A {
public:
std::shared_ptr<B> b_;
~A() { std::cout << "A deleted" << std::endl; }
};
class B {
public:
std::shared_ptr<A> a_;
~B() { std::cout << "B deleted" << std::endl; }
};
int main() {
std::shared_ptr<A> a(new A);
std::shared_ptr<B> b(new B);
a->b_ = b;
b->a_ = a;
return 0;
}
```
在上面的示例中,类 A 持有一个 shared_ptr 智能指针 b_,指向类 B 的实例。同时,类 B 持有一个 shared_ptr 智能指针 a_,指向类 A 的实例。这样就形成了循环引用,类 A 和类 B 之间互相持有对方的引用,导致它们在内存中无法被释放。
当程序运行结束时,由于存在循环引用,A 和 B 的析构函数都不会被调用,导致内存泄漏。为了避免 shared_ptr 循环引用,可以使用 weak_ptr 来打破循环引用。
阅读全文