我有一个 boost asio 服务器应用程序,我正在努力解决如何传输创建的套接字(例如,将接受套接字传输到将来读取/写入数据的协议(protocol)实现类)
例如,如果我让它们通过shared_ptr传输到不同的类,并对其进行读/写操作,那么就可以了。我的服务器在退出主程序之前有一个 io_service.run() ,并且在这些套接字上完成的所有异步操作都在其中执行。
编辑我发现问题不在于我传输套接字类的方式。可以将这些所有权保留在一个类中并在以后传递引用。在我的例子中,在异步操作处理程序完成其工作之前,其中一个连接类被销毁。
最佳答案
我认为这个问题实际上与 asio 没有任何关系,可以概括为“我应该如何转移分配对象的所有权?”。
我的答案是:使用std::unique_ptr
(...对于 C++11)
如果unique_ptr
的接收者想要使用不同的所有权习惯用法(例如shared_ptr
),那么很容易从unique_ptr
释放并转向将其放入 shared_ptr
中。相反的情况则不然。这样,您的指针就不会是原始的并且可能会泄漏。
关于c++ - boost asio - 套接字类的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9128311/