使用unique_ptr离开作用域时堆损坏

时间:2012-04-04 07:34:04

标签: c++ scope c++11 unique-ptr

我遇到类似于void pointer returned from function heap corruption

的问题

相似之处在于,当离开使用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
}

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

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

在您的情况下,您已在SomeMethod()中声明std::unique_ptr<IMyInterface> spMyInterface;,因此只要执行离开SomeMethod()的范围,您的对象就会被销毁。

查看unique_ptr