c++ - boost asio - 套接字类的内存管理

标签 c++ boost network-programming boost-asio

我有一个 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/

相关文章:

c++ - 为什么编译器允许你在这里 "write"一个 const 变量?

c++ - std::vector<bool> 是如何声明/定义的?

boost - C++ boost::shared_ptr & boost::weak_ptr & dynamic_cast

c++ - 在cygwin下 boost c++静态链接路径

c++ - 来自 TCP/IP 堆栈的网络传输时间

Python:如何从 FQDN 获取 IP 地址

android - 华为 JNI 上的 std::exception SIGSEGV

c++ - 是否保证 std::swap(x, x) 保持 x 不变?

c++ - 通过 Boost ASIO 服务器发送缓冲区 - 发送错误数据

c# - 如何找到哪台计算机发送打印作业?