Ed と Aix は正しいですが、内部ではさらに多くのことが行われています。
new を使用してから delete を使用すると、delete 呼び出しは 1 つのデストラクタを実行します。
new[] を使用する場合は、delete[] を使用する必要がありますが、delete[] は、呼び出すデストラクタの数をどのように知ることができますか? 2 つのインスタンスの配列、または 2000 のインスタンスの 1 つがある可能性がありますか? 一部の (おそらくほとんどまたはすべての) コンパイラが行うことは、返されるメモリの直前にインスタンスの数を格納することです。
したがって、new[5] を呼び出すと、new は次のようにメモリを割り当てます。
+---+-----------+-----------+-----------+-----------+-----------+
| 5 | instance1 | instance2 | instance3 | instance4 | instance5 |
+---+-----------+-----------+-----------+-----------+-----------+
そして、instance1 へのポインタを取得します。
後で delete[] を呼び出すと、delete[] はその数 (この場合は 5) を使用して、メモリを解放する前に呼び出す必要のあるデストラクタの数を確認します。
new と delete[]、または new[] と delete を混在させると、番号が欠落しているか、番号が正しくない可能性があるため、ひどく間違った方向に進む可能性があることに注意してください。
new[1] と delete を組み合わせるとうまくいく場合は、運がいいかもしれませんが、それに頼らないでください。