2016-11-30 1 views

答えて

8

delete myPointerは、メモリの割り当てを解除、それはいくつかのガベージアドレスを指していることを、myPointer変数の値を残します。

myPointer = NULLだけで、あなたがそれらの文字列の両方を使用する必要があります理想的な世界でmyPointer

と同じアドレスを指す他のポインタを、削除しない場合は、おそらくのように、メモリリーク、ヌル・ポインタにmyPointerの値を設定しますこの:

delete myPointer; // free memory 
myPointer = nullptr; // setting value to zero, signalizing, that this is empty pointer 

しかし、全体として、メモリ管理に現代的なアプローチである、std::unique_ptrを使用しています。

2

delete myPointerは割り当てられたスペースを解放しますが、(割り当てられていないものを指し示す)ダングリング・ポインターを使用できます。

myPointer = NULL

は(何を指している)の概念を表すために使用されるが、あなたは今、「失われた」されたメモリを解放していなかったとして、あなたがメモリが見返りにを漏らす与えている値にポインタを設定します。メモリリークは、悪用しないとあまり有害ではないかもしれませんが、常にプログラミングエラーとみなされます。

あなたは将来の問題を防ぐために、次のイディオムを使用することがあります。

簡単に言えば
delete myPointer; 
myPointer = NULL; 
+0

ケルビンで使用するイディオムは、スマートポインタです。 – rubenvb

+0

私は言ったかもしれません...しかし私は持ってはいけない、あなたの提案はもちろん良いです。 –

1

、削除は、以前新しいキーワードで割り当てられたオブジェクトのメモリを解放するために使用されます。オブジェクトのデストラクタは、オブジェクトのメモリが解放される前に呼び出されます(オブジェクトにデストラクタがある場合)。割り当て解除メモリ逆参照(通常は)削除呼び出した後にNULL値を持っていないが、それらのいずれかの操作がエラーを引き起こすこと

ポインタ。

NULLへのポインタの設定は、何も逆参照しないことを意味しますが、オブジェクトに割り当てられたメモリは引き続き維持されます。それは彼らがまだ有効(一貫性のあるメモリ領域間接参照)かそうでないかどうかを確認することができますように

は時々、彼らは間接参照オブジェクトを削除した後、NULLへのポインタを設定するのに有用である可能性があります。

関連する問題