ん?ちょっと話が戻るけど>>679の開放はnewした時にどんな構造体かに関わらず
delete [] data;
とやるだけでnewしたときの分がちょうど開放されるわけではないの?
malloc/freeの組み合わせも同様で。

どのコンパイラだか忘れたけど、動的確保したバイト数を、newで返るアドレスの手前に保存するのがあったはず。
まあコンパイラの実装方法は多々あるのかもしれないが、newした分のバイト数は内部でしっかりとっておかないと、普通に素直なnew/deleteしたときも困らないか?

標準を知る者求む。