ポインターを削除した後にポインターを NULL に設定する習慣は、多くの場合良い習慣であると考えられていますが、そうではありません。
C では、ポインタを NULL に設定して次のことを行うことができます。二重削除によって引き起こされる潜在的なクラッシュを回避します。ポインタが NULL に設定されている場合、それ以降にポインタを削除しようとしても問題はありません。これは、未定義の動作を引き起こす可能性がある、既に削除されたポインタの削除とは対照的です。
次の例を考えてみましょう。
Foo* foo = 0; // Sets the pointer to NULL delete foo; // Won't do anything
ここでは、ポインタは最初に NULL に設定されています。なので、削除しようとしても効果はありません。
ただし、ポインタが に設定されていない場合は、 NULL:
Foo* foo = new Foo(); delete foo; // Deletes the object delete foo; // Undefined behavior
ポインタはすでに削除されており、ポインタが指すメモリは解放されているため、2 回目の削除操作では未定義の動作が発生します。
削除後にポインタを null にするとクラッシュを防ぐことができます。 、二重削除のバグをマスクして未処理のままにすることもできます。二重削除のバグを完全に回避するのが望ましいですが、実際にはこれが難しい場合があります。
スマート ポインタはメモリを自動的に管理し、手動で削除する必要をなくすことで、この問題の解決策を提供します。ただし、レガシー コードの場合、または手動メモリ管理が推奨される特定のシナリオでは、削除後にポインターを null にすることでクラッシュを防ぐことができますが、使用には注意が必要です。
以上が削除後のポインターの無効化: 予防措置か、それとも潜在的な落とし穴か?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。