“弱回调”确保容器内存中始终是存活对象

在这里插入图片描述
在某些场景下会出现返回智能指针对象的创造者(内部有一个智能指针map成员)先于被创造者析构的情况,当被创造的智能指针析构的时候会core。
针对这种情况,通过智能指针的reset(T*,delete函数)的delete函数通过boost::bind绑定创造者的删除函数来处理,里面对weak_ptr类型的创造者进行lock,通过share_ptr是否为null,若空则说明创造者已经析构了,所以直接delete当前被创造者对象,否则将创造者对象中的被创造者从map中删除后再delete。这里还用share_form_this(),防止普通类型指针直接空的情况,并转化为weak_ptr防止对创造者生命周期的延长。
当被创造者先析构的时候或不存在的情况,需要该对象时会在get函数里通过以上方式创建被创造者对象share指针。
被创造者不收创造者生命周期约束,创造者始终维护当前存活的被创造者,由被创造者reset创建时的delete函数来维护map中始终是存活的被创造者对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值