我最近开始在一个项目中使用 Boost.Asio,想知道是否有人知道将新创建的套接字的所有权转移到 tcp::acceptor::async_accept 的干净解决方案,这反过来又会将此所有权转移到接受处理函数。
请注意,这不是一个不连贯的愿望,因为处理程序只被调用一次。
我注意到我不能将 std::bind() 和 std::unique_ptr<> 作为参数,因为 std::bind() 要求它的参数是 CopyConstructible 的,这是理所当然的。不仅如此,Boost 的 AcceptHandler 概念也要求是 CopyConstructible。
所以我的选择是:
- 使用已弃用的 std::auto_ptr<> 方式使用复制构造函数移动对象,这可能会在 Boost.Asio 的新版本中导致晦涩的错误。
- 使用 std::shared_ptr<> 并且一旦不再需要指针,即当它到达实际的处理函数时,就无法从指针中删除共享所有权(这是在http://www的示例中完成工作的方式.boost.org/doc/libs/1_43_0/doc/html/boost_asio/examples.html据我所知)。
或者
- 你对我有更好的主意。
我在这里几乎不知所措。任何人都可以启发我吗?