提升asio和shared_ptrs的扩散

ani*_*nio 4 c++ boost boost-asio

我最近开始使用boost.到目前为止,大多数事情都非常直接.但是让我疯狂的一件事是整个提升过程中shared_ptr的扩散.即使在简单的例子中,也使用了shared_ptr.

所以我的问题是,如果我使用boost来接受tcp连接然后处理它们.只要我保证在使用tcp完成之前不会删除在堆上创建的对象(boost :: asio :: ip :: tcp :: socket,以及将为异步方法调用的类)那么我不需要shared_ptr正确吗?

我写了一个简单的tcp服务器和客户端,不使用共享ptr,它的工作原理.但我只是想在外界确认我的评估是正确的.

另外,根据您的经验,您是否曾经需要使用shared_ptr来安抚提升?

Sam*_*ler 6

阅读文档io_service析构函数

上述销毁序列允许程序通过使用shared_ptr <>来简化其资源管理.如果对象的生命周期与连接的生命周期(或其他一些异步操作序列)相关联,则对象的shared_ptr将绑定到与其关联的所有异步操作的处理程序中.其工作原理如下:

当单个连接结束时,所有关联的异步操作都将完成.销毁相应的处理程序对象,并销毁对对象的所有shared_ptr引用.

要关闭整个程序,调用io_service函数stop()以尽快终止所有run()调用.上面定义的io_service析构函数会破坏所有处理程序,导致对所有连接对象的所有shared_ptr引用都被销毁.

换句话说,使用shared_ptr而不是裸指针将指数地更容易.