一、引用计数
shared_ptr维护着一个引用计数,引用计数以下情况将会递增:
- 指针构造(
std::shared_ptr pa(new A);
) - 拷贝构造(
std::shared_ptr pa=std::make_shared(args)
等情况 ) - 赋值运算(
pb=pa;
)
以下情况递减:
- 给定新值(
pa=make_shared(new A);
) - 离开作用域
- 主动销毁(
release() 放弃控制权 reset 放弃并释放
)
可以使用use_count()方法查看当前资源有多少个潜在的shared_ptr,unique()当引用计数为1时为true,反之则为false。
二、循环引用问题shared_ptr
出现循环引用的根本原因在于引用计数失效,导致其管理的空间无法释放。
举个简单的例子,class A
定义了一个指向自身类类型的智能指针m_spA
。
class A
{
public:
A(int i);
~A() { cout
关注
打赏