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

sungoco2 2008-03-17 02:11:39
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没有跟到。
请高手做答。
...全文
130 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paidfighting 2008-03-17
  • 打赏
  • 举报
回复
顶了~~
sungoco2 2008-03-17
  • 打赏
  • 举报
回复
换个问法吧,现在的vs2005的c++编译器把
delete [] pA
弄成了什么?
  • 打赏
  • 举报
回复
你用这个例子运行看看

#include<stdio.h>

class Base
{
char sz[12];
public:
virtual ~Base()
{
printf("Base::~Base\n");
}
};

class test:public Base
{
int data[4];
public:
~test()
{
printf("Base::~Base\n");
}
};

int main()
{
Base* p = new test[4];

delete[] p;

return 0;
}
  • 打赏
  • 举报
回复
你把~a函数的virtual去掉再试试看
liyuzhu_1984 2008-03-17
  • 打赏
  • 举报
回复
用基类指针指向子类数组,无非是想用多态,这样用是没有问题的
delete [] pA;的时候,因为基类的析构函数前面有个virtual,所以他会自动先调用子类的析构函数,然后再调用基类的析构函数

解答完毕

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧