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

Memory management in asynchronous C++ code

本文关键字:内存 管理 c++ 代码 异步      更新时间:2023-10-16

我使用boost::asio已经有一段时间了,虽然我确实理解异步调用的概念,但我仍然对内存管理的含义有些困惑。在正常的同步代码中,对象生存期是明确的。但是考虑一个类似于白天服务器的场景:

可能有多个活动连接已经accept。每个连接现在从套接字发送和接收一些数据,在内部做一些工作,然后决定关闭连接。可以安全地假设,与连接相关的数据需要在处理期间保持可访问性,但是一旦连接关闭,就可以释放内存。但是我怎样才能正确地实现数据的创建/销毁呢?假设我使用class es并将回调绑定到成员函数,我应该使用new创建一个类并在处理完成后立即调用delete this;,还是有更好的方法?

但是我怎样才能正确地实现数据的创建/销毁呢?

使用shared_ptr .

假设我使用类并将回调函数绑定到成员函数,我是否应该使用new创建一个类并调用delete this;一旦处理完成还是有更好的方法?

让你的类继承enable_shared_from_this,使用make_shared创建你的类的实例,当你绑定回调时将它们绑定到shared_from_this()而不是this。实例的销毁将在它们离开最后一个需要它们的作用域时自动完成。