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
悬空指针吗?
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
悬空指针吗?
您的代码完全有效。a.release()
将动态分配的对象与唯一指针分离,因此a
不再拥有该整数,但没有任何内容被删除。
但是,除非您最终不调用delete var
,否则您将发生内存泄漏。
不,这段代码之后var
不是悬空指针。是的,如果您不delete
显式调用或使用另一个智能指针,您将有内存泄漏。release
如果您手动处理智能指针,例如在将指针存储在其他地方后显式调用,智能指针不保证不会出现悬空指针。
顺便说一句,make_unique
您使用的功能不是标准的(尽管应该在它的下一个版本中),因此您的代码不可移植。
不
这是一个等价的
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