这是未定义的行为吗?如果指针指向无处,它如何删除分配的资源?
// Example program
#include <iostream>
#include <memory>
class A {
public:
A() {std::cout << "ctor"<<std::endl;};
~A(){std::cout << "dtor"<<std::endl;};
};
int main()
{
std::unique_ptr<A> ptr(new A);
ptr = nullptr;
return 0;
}
输出:
ctor
dtor
也许它是故意用这种方式来解决某种问题的?
答案 0 :(得分:9)
您正在调用std::unique_ptr
分配运算符(operator=( nullptr_t )
)。此运算符删除当前拥有的对象,并将唯一指针设置为不拥有任何内容。如果要释放对象的所有权以使其不被删除,则可以使用该功能。
ptr.release();
也许它是故意用这种方式来解决某种问题的?
是的,它旨在减少意外内存泄漏的实例,要求您在想要释放对象的所有权时(通过释放功能)明确。