智能指针释放失败

写程序的时候用到了智能指针,觉得很好用,以后麻麻再也不用担心内存管理了。但是最近程序里面发现了内存泄露,找了半天的原因,结果是智能指针这里出来问题。

这里小记一下,智能指针通过引用计数来管理内存,当引用计数减少到0说明没有对象引用了,这个时候就会清理内存。

SmartPoint a = new ojbectA; //(a的引用计数为1)

SmartPoint b = new objectB;  //b的引用计数为1

a->m_pb = b; // ojbectA的m_pb也是一个objectB类型的智能指针,这个时候b的引用计数加一 ,变为2

b->m_pa = a; // objectB的m_pa是一个objectA类型的智能指针,这个时候a的引用计数加一,变为2

这个时候当程序运行结束,a和b都会进行析构,a和b的引用计数都减1,然后都是1,结果都发现还有对象引用他们,导致a和b的内存都不能释放了。

总结:使用智能指针时,应该避免两个对象内都用智能指针保存对方。必要的时候,让至少其中一个直接使用指针记录就可以了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值