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
悬空指针吗?
答案 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