unique_ptr <int>悬空指针</int>

时间:2014-08-15 13:03:00

标签: c++ unique-ptr dangling-pointer

C ++代码:

unique_ptr<int> a  = make_unique<int>(159);
  auto var = a.get(); // Edited a => a.get() sorry
  a.release();
  std::cout<<*var<<std::endl; // prints "159"

此代码后是var悬空指针吗?

3 个答案:

答案 0 :(得分:5)

您的代码完全有效。 a.release()从唯一指针中分离动态分配的对象,因此a不再拥有整数,但没有删除任何内容。

除非你最终没有打电话给delete var,否则会有内存泄漏。

答案 1 :(得分:2)

不,在此代码var之后没有悬空指针。是的,如果你没有明确地调用delete或使用另一个智能指针,你将会有内存泄漏。智能指针不保证如果你手动处理它们就不会有悬空指针,例如通过在其他地方存储指针后显式调用release

BTW你使用的函数make_unique不是标准的(虽然应该在它的下一个版本中),所以你的代码不可移植。

答案 2 :(得分:0)

没有

这是等效的

unique_ptr<int> a  = make_unique<int>(159);
auto var = a.release(); // returns contained pointer and sets a to be empty
std::cout<<*var<<std::endl; // var is still valid here, though you should delete it after