2017-05-28 42 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:這是我的問題嗎?因爲我不理解它。 –