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

Aのオブジェクトが有効範囲外になると、pで消費されるメモリ領域が自動的に削除されます。クラスがスマートポインタだけで構成されていてもデストラクタをdelclare/defineする必要がありますか?

明示的に以下のようにデストラクタを記述する必要がありますか?

~A(){ 
     delete p; 
} 

これは冗長ですか?

+1

'ptr'は宣言されていません。 'p'を意味するなら、' p'は生のポインタではありません。 – aschepler

+0

私はそれをデバッグしました:-9 – mallea

答えて

1

デストラクタを明示的に以下のように記述する必要がありますか?

いいえスマートポインタのポイントは、メモリが自動的に管理されることです。

これは冗長ですか?

いいえ、それは、未定義の動作だ - "フリーダブル"が実行されます。 Aのデストラクタを提供しても、pのデストラクタは関係なく呼び出されます。

関連する問題