c++ - 异步 C++ 代码中的内存管理

标签 c++ memory-management boost-asio

我使用 boost::asio 已经有一段时间了,虽然我确实理解异步调用的概念,但我仍然对内存管理的含义有些困惑。在普通的同步 代码中,对象的生命周期是明确的。但请考虑类似于 daytime server 的情况。 :

可能有多个已被接受的事件连接。每个连接现在从套接字发送和接收一些数据,在内部做一些工作,然后决定关闭连接。可以安全地假设与连接相关的数据需要在处理过程中保持可访问性,但一旦连接关闭,内存就会被释放。但是我怎样才能正确地实现数据的创建/销毁呢?假设我使用 classes 并将回调绑定(bind)到成员函数,我是否应该使用 new 创建一个类并尽快调用 delete this;处理完成还是有更好的方法?

最佳答案

But how can I implement the creation/destruction of the data correctly?

使用shared_ptr

Assuming that I use classes and bind the callback to member functions, should I create a class using new and call delete this; as soon as the processing is done or is there a better way?

使您的类继承自 enable_shared_from_this,使用 make_shared 创建您的类的实例,并在绑定(bind)回调时将它们绑定(bind)到 shared_from_this() 而不是 this。当实例超出最后需要它们的范围时,实例的销毁将自动完成。

关于c++ - 异步 C++ 代码中的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24530771/

相关文章:

c++ - lambda函数可以递归吗?

c++ - eof 错误读取文本文件片段并写入 boost.asio 套接字

c++ - 编译命令成功,链接错误 undefined reference 符号 '_ZNSt3__15mutex4lockEv'

c++ - boost asio - 缺陷代码的更改

c++ - Streams 中的内联忽略

c++ - 错误 C2061 在 vi​​sual studio 中

c++ - 获取 std::min_element 和 std::max_element 以将迭代器返回到最后一个值?

go - 在 Go 中直接在堆上构造原始类型?

java - 如何在 Java 中的单独线程中运行客户端套接字?

C:从内存运行机器码