6

我面临类似于从函数堆损坏返回的 void 指针的问题

相似之处在于,我在离开使用 unique_ptr 的范围时收到“堆损坏”消息。

这里的代码:

void CMyClass::SomeMethod ()
{
  std::unique_ptr<IMyInterface> spMyInterface;
  spMyInterface.reset(new CMyInterfaceObject()); // CMyInterfaceObject is derived from IMyInterface

  any_list.push_back(spMyInterface.get()); // any_list: std::list<IMyInterface*>

  any_list.clear(); // only clears the pointers, but doesn't delete it

  // when leaving the scope, unique_ptr deletes the allocated objects... -> heap corruption
}

知道为什么会这样吗?

4

1 回答 1

4

std::unique_ptr 是一个智能指针,它通过指针保留对象的唯一所有权,并在 unique_ptr 超出范围时销毁该对象。

在您的情况下,您已经std::unique_ptr<IMyInterface> spMyInterface;在 SomeMethod() 内部声明,因此一旦执行离开 SomeMethod() 的范围,您的对象就会被破坏。

看看unique_ptr

于 2013-07-03T12:16:58.170 回答