>>662

X*p=new X[10];
delete[]p;
は問題ないが

X*p=new ChildX[10];
delete[]p
は実はC++では駄目。
なぜなら、これを実現しようとすると型のサイズと要素数の二つを暗黙的に管理する必要になるので、
そんなもったいないことは貧乏くさいC++では許さないのだ。

ChildX*p = new ChildX[10];
delete[]p;

のように正しい型の配列にするか、

X**p=new X*[10];
for(int i=0;i<10;++i)p[i] = new ChildX;

for(int i=0;i<10;++i)delete p[i];
delete[]p;

のようにポインタの配列にするのがC++のルール。