2017-04-09 28 views
-1
class A{ 
    public: 
     A():p(nullptr){}; 
    private: 
     std::unique_ptr<B> p; // B is some class 
}; 

當A的對象超出範圍時,將自動刪除佔用內存空間的內存空間,該內存空間消耗的內存空間爲p即使類僅由智能指針組成,我們是否應該聲明/定義析構函數?

我們是否應該像下面那樣顯式編寫析構函數?

~A(){ 
     delete p; 
} 

這是多餘的嗎?

+1

'ptr'未申報。如果你的意思是'p','p'不是一個原始指針。 – aschepler

+0

我調試它:-9 – mallea

回答

1

我們是否應該像下面那樣顯式編寫析構函數?

不可以。智能指針的重點在於內存是自動管理的。

這是多餘的嗎?

不,這是未定義行爲 - 一個「雙無」將被執行。即使你爲A提供了析構函數,p的析構函數也會被調用。