4

重複の可能性:
削除してポインタをNULLに設定しないのはなぜですか?

割り当て解除されたメモリへのポインタの目的はありますか?

4

3 に答える 3

6

C ++は、指示どおりに実行します。ポインタをnullに設定せず、ポインタが指しているメモリを削除しました。

必要がないのに、(パフォーマンス上の理由で)nullに設定するという余分な手順を無駄にするのはなぜですか?

于 2010-10-01T02:58:42.920 に答える
6

constポインタの場合はどうなりますか?

于 2010-10-01T03:03:11.827 に答える
2

いいえ、コードを書くのがいかに無能であるかを示す以外に、元の値に設定したままにしておくことには実際の使用はありません:-)

それはあなたが何をしているのかを知ることが期待されるという点でCの伝統に従います。コンパイラーに解放されたポインターをNULLに設定させるコストは、Cの時代には高すぎると見なされ、これは。を使用してC++に引き継がれましたdelete。適切にコーディングすれば、コンパイラーにポインターをNULLに設定させるのは無駄です。これは、ポインターを別の場所に設定するか、再度使用しないためです。

コードを本当に安全にしたい場合は、(Cで)次のようにします。

void myFree (void **pMem) {
    free (**pMem);
    *pMem = NULL;
}
myFree (&x);

ただの代わりに:

free (x);

しかし、そのレベルに進む(そしてそのような嫌悪感を導入する)場合は、Javaに切り替えてそれを実行するだけで、手動のメモリ管理についてまったく気にする必要はありません。

于 2010-10-01T02:59:41.473 に答える