デストラクター内のヌル ポインターは有益ですか?
C では、オブジェクトの作成時に動的にメモリを割り当てるのが一般的です。ただし、これらのオブジェクトが破棄された場合は、メモリの割り当てを適切に解除することが重要です。デストラクターはこのタスクを担当します。割り当てられたメモリを削除することは不可欠ですが、デストラクターでポインターを NULL に設定する追加の手順には疑問があります。
仮定と現実
という仮定提供されているコード例では、ポインタを NULL に設定するのは時間の無駄です。この実践は、デバッグ目的の DEBUG ビルドで役立つ可能性があります。
NULL に設定することが有害である理由
デストラクターでポインターを NULL に設定するRELEASE ビルドでは明らかになるであろう DEBUG ビルドの問題が隠れている可能性があります。たとえば、削除されたオブジェクトへのダングリング参照があり、ポインターが NULL に設定されている場合、コードは NULL チェックによりポインターの使用を回避することがあります。これにより、ユーザーが知らないうちに実行されるバグのあるコードが発生する可能性があります。
NULL ポインターの代替
ポインターを NULL に設定する代わりに、別のポインターを確立することをお勧めします。イディオム。効果的な方法の 1 つは、ポインタを既知の不正なポインタ値に設定することです。このようにすると、オブジェクトへのダングリング参照がある場合、ポインターを使用しようとすると、診断可能なクラッシュが発生します。これは、バグをマスクするのではなく、バグを捕捉するのに役立ちます。
結論
デストラクター内のポインターを null にするのは簡単な作業のように思えるかもしれませんが、その潜在的な結果を理解することが重要です。一般に、デストラクターでポインターを NULL に設定することはお勧めできません。代わりに、より明確な診断を提供し、デバッグの問題を最小限に抑える別のアプローチを使用することを検討してください。
以上がデストラクターでポインターを null にする必要がありますか?代替案に対する反論と、代替案の方が優れている理由。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。