shared_from_this() 作用:

c++11中的shared_from_this()
    c++11中的shared_from_this()来源于boost中的enable_shared_form_this类和shared_from_this()函数,功能为返回一个当前类的std::share_ptr,这是一次深拷贝操作,使用方法如下: 
    

std::shared_ptr<DeleteFileHandle> this_ptr = std::dynamic_pointer_cast<DeleteFileHandle>(shared_from_this());

 

uevent::MessageUtil::SendPbRequest(

chunkserver_conn, msg, std::bind(&DeleteFileHandle::EntryDeleteChunk,

this_ptr, std::placeholders::_1),

 

EntryDeleteChunk函数获取了当前处理类得对象的深拷贝副本


在什么情况下要使类A继承enable_share_from_this?

使用场合:当类A被share_ptr管理,且在类A的成员函数里需要把当前类对象作为参数传给其他函数时,就需要传递一个指向自身的share_ptr。

我们就使类A继承enable_share_from_this,然后通过其成员函数share_from_this()返回当指向自身的share_ptr。主要作用如下:

  1.把当前类对象作为参数传给其他函数时,为什么要传递share_ptr呢?直接传递this指针不可以吗?

  一个裸指针传递给调用者,谁也不知道调用者会干什么?假如调用者delete了该对象,而share_tr此时还指向该对象。

  2.这样传递share_ptr可以吗?share_ptr <this>

  这样会造成2个非共享的share_ptr指向一个对象,最后造成2次析构该对象。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值