返回后的C++内存释放

use*_*294 2 c++ memory-leaks memory-management

我有关于c ++内存分配和释放的问题.情况就是这样:我有一个方法foo,它分配内存然后返回该对象:

Object foo () {
  Object *a = new Object();
  // Do something with this object...
  return *a;
}
Run Code Online (Sandbox Code Playgroud)

和另一个使用此返回对象的方法:

void bar () {
  Object a = foo();
  // Do something..
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我应该在哪个时候释放我分配的内存?当我从方法foo返回时,方法栏是否在其堆栈上获得该对象的副本,或者它是否可以访问内存中某个对象?

谢谢!巴特

Ben*_*ley 5

您无法释放该对象.它丢了.这是一个内存泄漏.你永远不应该(动态地)分配它.您的代码应该如下所示:

Object foo () {
  Object a;
  // Do something with this object...
  return a;
}
Run Code Online (Sandbox Code Playgroud)

当我从方法foo返回时,方法栏是否在其堆栈上获得该对象的副本,或者它是否可以访问内存中某个对象?

它是仍然存在的无法访问的对象的副本.