2016-04-11 12 views
1
#include<iostream> 
#include<memory> 
using namespace std; 
int main() 
{ 
    unique_ptr<int> p(new int); 
    *p = 10; 
    cout<<*p<<endl; 
    p = NULL; 
    if(p) 
    cout<<"It's NOT NULL\n"; 
    else 
    cout<<"It's NULL NOW\n"; 
    return 0; 
} 

//私はNULLをpに割り当てたので、プログラムが終了すると、//を持つpが削除されます。 NULLを削除しても問題は発生しませんが、p //前のメモリ保持は解放されません。私は正しいですか?ここでunique_ptrにメモリリークがあります

+0

質問をするときは、コードに使用した言語のタグを入力します。あなたはw/o C++タグに質問しますが、C++開発者はあなたの質問に答えることはできません。 – FLICKER

+0

デストラクタのstdoutにダンプしたシンプルなクラス型のように、単純に 'int'ではなく何かを使って破壊することができることをコーディングすると、 。 – WhozCraig

答えて

6

p = NULLではなくp = nullptrを使用する必要がありますが、メモリリークは発生しません。標準から

reset()を呼び出すため

unique_ptr& operator=(nullptr_t) noexcept;

での効果:std::unique_ptrnullptr_tタイプの代入演算子をオーバーロードするためです。そして、これは、指差しのメモリを解放します。

関連する問題