在将unique_ptr资源设置为nullptr后,它将如何被释放?

时间:2017-05-28 15:57:05

标签: c++ smart-pointers

这是未定义的行为吗?如果指针指向无处,它如何删除分配的资源?

// 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

也许它是故意用这种方式来解决某种问题的?

1 个答案:

答案 0 :(得分:9)

您正在调用std::unique_ptr分配运算符(operator=( nullptr_t ))。此运算符删除当前拥有的对象,并将唯一指针设置为不拥有任何内容。如果要释放对象的所有权以使其不被删除,则可以使用该功能。

ptr.release();
  

也许它是故意用这种方式来解决某种问题的?

是的,它旨在减少意外内存泄漏的实例,要求您在想要释放对象的所有权时(通过释放功能)明确。