6

重複の可能性:
削除する前にNULLポインターをチェックする理由はありますか?

私はコードで次のことをよく目にします:

if(pointer)
    delete pointer;

私の理解では、nullポインターを削除しても安全です。では、このチェックのポイントは何ですか?

4

4 に答える 4

9

deleteポインタがNULLかどうかをチェックするので、チェックは必要ありません。

また、削除後にポインタをNULLに設定して、自分のものではなくなったメモリを使用したり、ポインタを2回削除するのを止めたりするなど、愚かなことをしないようにする人もいるかもしれません。これにより、エラーが発生します。

于 2011-11-04T03:15:30.653 に答える
1

チェックは必要ありません。

ドキュメントには、deleteは「ptrが指すメモリブロックの割り当てを解除する(nullでない場合)」と記載されています。

于 2011-11-04T03:14:25.210 に答える
1

今は安全ですが、いつもではありませんでした:-)ですから、習慣的である可能性があります。また、削除する他の結果があります。1)専用のメモリマネージャーを使用していて、new演算子とdelete演算子をオーバーライドしている場合は、OperatorDeleteのチェックを実行して詳細を確認する必要があります。

于 2011-11-04T03:13:57.980 に答える
0

ほとんどの人は、他の方法でエラー処理を行うことが多いため、これを行います(それ以外は、チェックを行う意味がわかりません)。場合によっては、何かを解放していて、誤ってどこかでポインタを変更して、解放しないことでメモリリークを引き起こしていないことを確認するためにそれを行います。free(NULL);すべての場合に機能し、エラーが発生しないはずなので、エラー処理が含まれていない限り、ifステートメントを削除して無料で実行できます。

于 2011-11-04T03:15:05.637 に答える