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

C++ 异步C+中的内存管理+;代码,c++,memory-management,boost-asio,C++,Memory Management,Boost Asio,我已经使用boost::asio一段时间了,虽然我确实理解了异步调用的概念,但内存管理的含义仍然让我有些困惑。在正常的同步代码中,对象寿命是明确的。但是考虑一个类似于:的情况。 可能有多个已接受的活动连接。每个连接现在从套接字发送和接收一些数据,在内部执行一些工作,然后决定关闭连接。可以安全地假设,在处理过程中,与连接相关的数据需要保持可访问性,但一旦连接关闭,内存就可以释放。但是,如何正确地创建/销毁数据?假设我使用classes并将回调绑定到成员函数,我是否应该使用new创建一个类并调用删除

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

的情况。 可能有多个已接受的活动连接。每个连接现在从套接字发送和接收一些数据,在内部执行一些工作,然后决定关闭连接。可以安全地假设,在处理过程中,与连接相关的数据需要保持可访问性,但一旦连接关闭,内存就可以释放。但是,如何正确地创建/销毁数据?假设我使用
class
es并将回调绑定到成员函数,我是否应该使用
new
创建一个类并调用
删除该类一旦处理完成,还是有更好的方法

但是,如何正确地创建/销毁数据

使用
共享\u ptr

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


使您的类继承自
启用\u共享\u from\u this
,使用
使\u共享
创建类的实例,并在绑定回调时将它们绑定到
共享\u from\u this()
而不是
this
。当实例超出需要它们的最后一个作用域时,将自动销毁它们。

注意:只有
boost::bind
可以与
boost::shared\u ptr
AFAIK一起使用(尽管您可以通过lambda实现同样的效果,lambda通过值将
shared\u从\u this()
中保留),它似乎也适用于普通的
std::bind
。感谢您指出这一点,变化是相当微妙的。另一个问题浮现在脑海中:如果我在堆栈上的对象上使用
shared\u from\u this()
函数,会发生什么?当poiner被销毁时,这会导致segfault吗?
shared\u from\u this()
旨在获取已拥有
实例的
shared\u ptr
的副本,如果您的实例不属于
shared\u ptr
,请不要使用它,因为确切的行为尚未真正定义。嗯,这几乎意味着我必须把所有的东西都放在堆里,不是吗?我觉得给出的答案不是真实的,也不是可以接受的,并对其原因进行了评论。我在问一个相关的问题:对于任何一个用谷歌搜索这个的人来说。