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