笔试中的一个找错的题

qinjun312 2012-03-07 04:09:27

class A
{
public:
A(){}
~A(){}
};

class B:public A
{
public:
B(){}
~B(){}
};

int main()
{
A *p=new B;
delete p;
p=0;
return 0;
}


在VC中运行 没问题 。不知道错误之处是哪里
...全文
2536 55 打赏 收藏 转发到动态 举报
写回复
用AI写文章
55 条回复
切换为时间正序
请发表友善的回复…
发表回复
zouxiren2007 2012-03-13
  • 打赏
  • 举报
回复
不好意思哦!有点儿看不懂哦!!
youhao1999 2012-03-12
  • 打赏
  • 举报
回复
+1[Quote=引用 49 楼 buleriver 的回复:]

虚析构函数啊,否则会内存泄露的。
[/Quote]
GoForSky 2012-03-12
  • 打赏
  • 举报
回复
虚析构函数。楼主多看看C++的基本教材吧
nmgzhangds 2012-03-11
  • 打赏
  • 举报
回复
基类的析构函数往往都是虚的,这样派生类在调用析构函数时才会由于多态性的缘故释放基类的和子类的内存。不然就造成了内存泄露。
蓝米粒 2012-03-11
  • 打赏
  • 举报
回复
首先,基类的指针能够接受派生类的对象,但是你基类的指针接收派生类对象后,并且在堆中动态开辟空间了。那么如果基类的析构函数不是虚析构函数的话。它就不会调用派生类的析构函数,所以你内存被泄露了。你可以把析构函数写上一句输出,你就明白了。
fabc34567 2012-03-11
  • 打赏
  • 举报
回复
这段代码放在任何正确的C++编译环境编译,不会报错;编译出的结果放到相应的平台运行也不会出问题。
所以这段代码完全正确。

鉴定完毕
BuleRiver 2012-03-10
  • 打赏
  • 举报
回复
虚析构函数啊,否则会内存泄露的。
才仔 2012-03-09
  • 打赏
  • 举报
回复
受用了
linshenqi 2012-03-09
  • 打赏
  • 举报
回复
基类析构前加个virtual吧,不然析构派生类时不会释放基类的。
yujie_v 2012-03-09
  • 打赏
  • 举报
回复
这个属于简单问题
愤怒的熊猫007 2012-03-09
  • 打赏
  • 举报
回复
P = 0改为p = NULL;
NULL的定义如下
#define NULL (void*)0
拿枪的大盖伦 2012-03-09
  • 打赏
  • 举报
回复
定义的时候 指针指向的是基类 实际析构的是基类部分 并不会析构派生的 给基类的析构函数加virtual吧
我喝多了 2012-03-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mingliang1212 的回复:]
class A
{
public:
A(){}
virtual ~A(){}
};
[/Quote]

正解
biangege87v5 2012-03-09
  • 打赏
  • 举报
回复
讨厌指针,讨厌析构函数,所以我学了JAVA
elegant87 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mingliang1212 的回复:]

class A
{
public:
A(){}
virtual ~A(){}
};
[/Quote]
正解
yueyueniao96 2012-03-08
  • 打赏
  • 举报
回复
子类对象创建时先调用父类构造函数然后在调用子类构造函数,在清除对象时顺序相反,所以delete p只清除了父类,而子类没有清除。。。
zhongliangzhihou 2012-03-08
  • 打赏
  • 举报
回复
4楼正解
pupingpp 2012-03-08
  • 打赏
  • 举报
回复
学习了,面向对象还在学习的孩纸表示受益匪浅啊
wr901026 2012-03-08
  • 打赏
  • 举报
回复
基类的析构要有virtual!学习了!!以前没怎么注意到。。。
程序员imHou 2012-03-08
  • 打赏
  • 举报
回复
Mark 学习一下。平时没注意的东西,这里有答案了
加载更多回复(30)

64,654

社区成员

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

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