私の経験では、解放されたメモリ割り当てにアクセスするとき、ほとんどの場合、これはほとんど役に立ちません。どこかへの別のポインタがあるためです。そして、それは「無駄な混乱を避ける」である別の個人的なコーディング標準と衝突するので、コードを少しだけ読みにくくするのに役立つことはめったにないと思うので、私はそれをしません。
ただし、ポインタが再度使用されることになっていない場合は、変数をnullに設定しませんが、多くの場合、より高いレベルの設計により、とにかくnullに設定する理由が得られます。たとえば、ポインターがクラスのメンバーであり、それが指すものを削除した場合、そのクラスの「契約」は、そのメンバーがいつでも有効なものを指すため、nullに設定する必要があるということです。そのため。小さな違いですが、重要なものだと思います。
C ++では、誰が所有するかを常に考えることが重要ですメモリを割り当てるときこのデータのです(スマートポインターを使用している場合を除いて、いくつかのが必要です)。そして、このプロセスは一般的にポインタがいくつかのクラスのメンバーになる傾向があり、一般的にはクラスを常に有効な状態にしたいので、メンバー変数をNULLに設定してポイントすることを示すのが最も簡単な方法です。今は何にも。
一般的なパターンは、コンストラクターですべてのメンバーポインターをNULLに設定し、デストラクタが、クラスが所有していると設計が示すデータへのポインターに対して削除を呼び出すことです。明らかにこの場合、何かを削除するときにポインターをNULLに設定して、以前にデータを所有していないことを示す必要があります。
要約すると、はい、私はしばしば何かを削除した後にポインタをNULLに設定しますが、それは大規模な設計の一部としてであり、コーディング標準ルールに盲目的に従うためではなく、データを所有する人についての考えです。私はあなたの例ではそうしません。そうすることには利点がなく、私の経験では、この種のものと同じくらいバグと悪いコードの原因である「乱雑」を追加するからです。
ptr == NULL
使って何かをする前に、それが何かをチェックできることは常に役に立ちます。解放されたポインタを無効にしないと、取得ptr != NULL
できますが、まだ使用できないポインタです。