基类指针指向子类对象数组的问题
class a
[
a〔〕;
virtual `a〔〕;
]
class b ;public a
[
int ab;
b〔〕;
virtual `b〔〕;
]
现有;
a *pA = new b[10];
...
delete [] pA;
书上说,delete的时候只会调用a的析构函数,并且传给vec-delete的对象大小也是sizeof[pA]的大小,因此,书上建议不要使用基类指针指向子类数组。但是我实验的结果是,a和b的析构函数均调用了,因为看不懂汇编,因此vec-delete没有跟到。
请高手做答。
[解决办法]
简单说吧,就是
其中size是 数组所占的内存空间
p是首指针
for(int i = 0 ; i< size/sizeof(A ) ; i++ ){
(p+sizeof(A )*i)->~A ();
}
释放p;