4年前C言語のポインタから見なおしたほうがいいかもしれないですよ。hoge;で統一しちゃったりとかしたらダメなんですかね?そのやり方は言語の規格書に載っていません。同じ意味ととらえてしまう貴方には、なぜ型が存在するのかをちゃんと考えてほしいですね。配列と配列でないのと一緒にする、という話と同じですから。4年前そう言うのが面倒なら、ガベージコレクションのあるJavaやC#を選択されるべきだと思います。STLなどで固めてnewを自分で書かないコーディングを徹底するかですね。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。実行するとどちらも異常終了します。呼び出したのと同じ個数のデストラクタを呼び出さなければなりません。1個しか呼び出しません。使わなければならない理由の一つです。次に、なぜ、プログラムが異常終了するのかを説明します。それをどこかに記憶しておかなければなりません。確保した領域のアドレスではなく、個数の領域の次のインスタンスの領域のアドレスを返します。指定されたアドレスのひとつ前に個数が入っているので、それを使ってデストラクタをその個数だけ呼び出した後、本当に確保されたアドレスですべての領域を解放します。指定されたアドレスで解放するので、それは本当に確保された領域ではないため、異常終了するのです。4年前deleteとdelete[]ってそんな違いがあったんですね。4年前ちょっと補足します。p;}このプログラムは異常終了しません。指定したアドレスを解放するだけだからです。問題なく動くので、それで違いが分からず質問されたのだと思います。気になったのはこっちですdeleteしなくてはならない配列の要素数が判らなくて困ります。配列でも配列じゃなくても、常にdelete[](あるいは常にdelete)するような設計も可能だったかもしれませんが、C++ではそのような文法は採用されませんでした。プログラマに自由と責任を与えるC言語の方針の踏襲かも。気になったのはこっちですこの場合、デストラクタがないので、個数は不要。指す領域をそのまま解放するだけです。ミクプラは自由にリンクできます。