最近和Boost.Asio一起玩了很多.我非常喜欢这个库,因为它提供了一种从当今的多核系统中挤出性能的绝佳方法.
我问自己几次的问题,我认为在与Asio进行异步调用时,有必要抛弃对象的生命周期/所有权.
我反复遇到的问题是,你经常需要"过期"一个仍然有异步回调的对象.如果在调用回调之前该对象超出范围,则事物不可避免地会爆炸.
为了解决这个问题,我已经将boost::enable_shared_from_this
模板用作大多数基于asio的类的基类.这可以正常工作,但这有点麻烦:通常这也意味着保护构造函数并向类中添加工厂方法以确保在shared_ptr中创建所有实例.
我只是想知道其他人是如何解决这个问题的.我是最好的方式吗?或者我的Asio.Foo都错了?
讨论... :)