注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

C++异步调用时boost的 share_from_this 真是好用  

2012-06-08 15:30:25|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        把类的成员函数作为异步操作的回调时把 shared_from_this()返回的智能指针传过去,而不是传this指针给 boost::bind 操作。然后对象使用 share_prt 来管理。注意的是类继承自enable_shared_from_this后,要使用shared_from_this()的话,对象一定要经过share_prt 的初始化才能使用。像下面这样写,如果你使用了enable_shared_from_this.之后就不要再用其他形式来创建对象了。boost::shared_ptr<CharSession>  new_session(new CharSession(....))
shared_from_this 也是不能在构造函数里面使用的,应该是在 “boost::shared_ptr<CharSession>  new_session(new CharSession(....))"  这一句之后使用,可以写在成员函数里面的啦。

         这样的boost::shared_ptr<CharSession>  可以放到 stl容易里面去管理,使用起来很方便。相比较直接把对象指针放到容器,需要删除对象时,不再需要小心翼翼的delete。之前遇到的问题就是需要delete 容器里面的对象指针时的时候,有些捆绑的异步函数还没有返回,如果提前delete了对象,等会异步操作返回的时候就出错了,使用了share_from_this()  之后代码应该方便好多了。


enable_shared_from_this.hpp  

网络库asio  的“example” 里面 的“chat server” 例子有怎么使用例子。可以去参考一下。

  评论这张
 
阅读(1165)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017