Boost.asio和异步链,unique_ptr?

2024-05-24

我对异步编程不太熟悉,我有一个问题。

我的问题如下。给出 boost.asio 中 C++11 的 echo_server 示例:http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/example/cpp11/spawn/echo_server.cpp http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/example/cpp11/spawn/echo_server.cpp

我想知道是否std::make_shared<session>可以在 C++14 中替换为std::unique_ptr<session>在C++14中,避免了引用计数的开销。

我不确定,因为我们已经shared_from_this()但不是类似的东西unique_from_this(),那么我怎样才能访问unique_ptr<session>从内部this?.


不,shared_ptr的使用asio编程是惯用的。

这个想法是,未完成的处理程序的数量与启动异步操作的对象的共享计数相匹配。这是通过绑定一份副本来实现的shared_ptr将对象管理到处理函数对象中。

c++11/14 的方法是替换boost::shared_ptr with std::shared_ptr (std::bind、 lambdas 等也可以与 asio 完美配合)。

更新,现在我完全理解了这个问题:

在您链接的示例中,我认为您指的是名为 self 的shared_ptr,它是在方法 go() 中创建的?如果你愿意的话,你可以在没有shared_ptr的情况下编写它。您必须将 delete this 作为 go() 的最后一行。您还必须记住捕获任何异常以确保采用此代码路径。当然,可以设置 unique_ptr 来执行此操作,但是在构建会话和成功创建采用的 unique_ptr 之间会遇到生命周期管理问题。 shared_ptr 减轻了一个原子公司成本的管理负担...

在这种情况下,答案是严格的“是”,但恕我直言,我会建议,因为它更脆弱。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Boost.asio和异步链,unique_ptr? 的相关文章

随机推荐