6

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

私は、C ++言語が、pがNULLに等しい場合、deletepが何もしないことを保証していることを知っています。しかし、さまざまなプロジェクト、記事、例では、削除する前にNULLをチェックしていることがわかります。通常はフォーマット

    if(pObj)
       delete pObj;

なんでそうなの?いくつかの歴史的な理由?オブジェクトを正しく削除する方法について完全に混乱しています。

4

4 に答える 4

15

なんでそうなの?

無知。それが何もしていないことを知らない人もいdelete(NULL);ます。

ポインタが本当に有効かどうかを実際に確認することはできません。2回削除すると、未定義の動作が発生します。

于 2012-12-11T10:59:27.897 に答える
11

いいえ、これは完全に無意味です。deleteは、すでにnullに設定されているポインターを削除しません。だからあなたの好きなようにnullポインタを削除してください!

于 2012-12-11T10:57:01.920 に答える
1

deleteは演算子であり、デストラクタを呼び出します。削除演算子がNULL何も起こらずに使用された場合、すでにすべての回答と同じように、nullをチェックすることは無意味です。

于 2012-12-11T11:00:55.873 に答える
1

それを行うもう1つの理由は、valgrindの警告を取り除くことです。

于 2012-12-11T11:02:41.583 に答える