スタックに割り当てられた変数に対して Delete を安全に呼び出すことができますか?
C プログラミングの領域では、メモリの微妙な違いを理解することが重要ですスタックまたはヒープ上の変数の割り当てに関連します。プログラミングのスタイルと設計を考慮する必要がありますが、スタックに割り当てられた変数に対して delete を呼び出すことは許されますか?
問題の調査
次のコードを考えてみましょうスニペット:安全性の問題
質問に対する答えは、断固としてノーです。スタックに割り当てられた変数に対する delete の呼び出しは安全ではないため、避ける必要があります。メモリ割り当ての原則
理由を理解するには、メモリ割り当ての原則を理解することが重要です。 。すべて:違法な混合
これらの割り当て方法を混合することは固く禁止されています。 new で割り当てられたオブジェクトを解放または delete[] しようとすると、未定義の動作が発生します。スタックに割り当てられた変数に対して delete を呼び出す場合にも同じことが当てはまります。削除の結果
スタックに割り当てられた変数に対して delete を呼び出す場合、コンパイラは最適化を実行する場合があります。 、オブジェクトがスコープ外になった後は使用されないと仮定した省略など。ただし、そのような変数に対して delete を明示的に呼び出すと、次のような問題が発生する可能性があります。結論
メモリの整合性を維持し、未定義を回避するには動作を行うには、メモリ割り当ての原則を尊重することが不可欠です。スタックに割り当てられた変数に対して delete を呼び出すことを避け、適切な割り当てと割り当て解除のペア (malloc/free、new/delete、new[]/delete[]) に従ってください。以上がC でスタックに割り当てられた変数に対して「delete」を呼び出しても安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。