delete について質問です。
new hoge[n] で獲得した領域は delete[] で解放しなくてはいけないそうですが、new hoge で獲得した領域を delete[] しても大丈夫でしょうか?
それとも delete[] したいなら、new hoge[1] とかするべきでしょうか(これだとコンストラクタに引数を渡したい場合に困りそうですが)。

あと、都合により
void *p = (void*)new hoge;
と獲得した領域を delete する場合、delete (hoge*)p とやらないと hoge のデストラクタが走らないのは仕様なんですよね?
つまり、delete に渡すポインタは、new したときの型で渡さないといけないということですよね?
# できればキャストせずにうまく動いて欲しいのですが