您当前的位置: 首页 > 

我什么都布吉岛

暂无认证

  • 0浏览

    0关注

    292博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

智能指针(三) 智能指针的陷阱

我什么都布吉岛 发布时间:2020-06-01 11:26:08 ,浏览量:0

一、引用计数

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             
关注
打赏
1658157489
查看更多评论
0.0386s