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