1. ホーム
  2. c++

[解決済み] delete vs delete[] [duplicate] (重複)

2022-11-20 04:29:18

質問

重複の可能性があります。

( POD )メモリの解放 : delete[] は delete と同じですか?

私がC++を教わったころは、ずいぶん昔の話です。を絶対に使うなと言われました。 deletedelete[] を実行するように delete[] を実行することは、1つのオブジェクトに対して delete . 先生をあまり信用してはいけないと思いつつも、これは本当なのだろうか?

を呼ぶ理由があるのだろうか? delete の代わりに delete[] ?

私はSOで関連しそうな質問をスキャンしましたが、明確な答えは見つかりませんでした。

どのように解決するのですか?

規格(5.3.5/2)から:

最初の選択肢(delete オブジェクト)では,オペランドの値として へのポインタでなければならない。 配列でないオブジェクトへのポインタ、あるいは サブオブジェクト(1.8)へのポインタでなければならない。 へのポインタでなければならない(第10節)。 そうでない場合、動作は未定義である。

2番目の選択肢(delete 配列)では,オペランドの値として のオペランドの値は,前の配列から生じたポインタの値でなければならない。 であり,以前の配列 の新しい式になります。 でない場合、その の動作は未定義です。

だからダメなんだ : これらは決して同等ではない !