2017-05-28 44 views
0

这是不确定的行为?如果指针指向任何地方,它如何删除分配的资源?将unique_ptr资源设置为nullptr后,它将如何释放?

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

嗯wut ??????? –

+5

这里调用析构函数:'ptr = nullptr;' –

回答

9

您在致电std::unique_ptr赋值运算符(operator=(nullptr_t))。该运算符删除当前拥有的对象并将唯一指针设置为无。如果你想释放对象的所有权,所以它不被删除,有一个功能。

ptr.release(); 

也许有人故意创建这种方式来解决一些问题呢?

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

+0

哦,我明白了。 “你可以在10分钟内接受答案” - s.o说。对unique_ptr有很大的意义。相当清楚我的怀疑!谢谢 –

+1

为什么如果你允许从外面访问,那么为什么还要使用一个独特的智能指针(大概在发布之后)? – Scooter

+0

@Scooter:这是我的问题吗?因为我不理解它。 –