把类的成员函数作为异步操作的回调时把 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” 例子有怎么使用例子。可以去参考一下。
|
|