读书人

基类指针指向子类对象数组的有关问题

发布时间: 2012-03-09 16:54:57 作者: rapoo

基类指针指向子类对象数组的问题
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;

读书人网 >C++

热点推荐