应不应该delete []c

hahaysw 2008-09-12 06:10:18

#include<iostream>
#include<stack>
#include<string>
using namespace std;
class a{
public:
a():c(new int[10]){}
~a(){delete []c;}
protected:
int *c;
};
class b:public a{
public:
b():d(new int [100]){}
~b(){delete []c;delete []d;}//就是这,应不应该delete []c;
//能说个理由更好。因为delete []c;写不写程序都能过。
private:
int *d;
};
int main()
{
a y;
b z;
return 0;
}
...全文
86 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SeanHwang 2008-09-12
  • 打赏
  • 举报
回复
不用写,会自动调用基类析构函数~
phz1985 2008-09-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xkyx_cn 的回复:]
不需要写,构造b时会调用a的默认构造函数,析构时也会调用其析构,这时会完成delete []c的工作

这里的调用与是不是虚函数没有关系
[/Quote]
up.
先析构b,再析构a.
xkyx_cn 2008-09-12
  • 打赏
  • 举报
回复
不需要写,构造b时会调用a的默认构造函数,析构时也会调用其析构,这时会完成delete []c的工作

这里的调用与是不是虚函数没有关系
wangdeqie 2008-09-12
  • 打赏
  • 举报
回复

//或者这么写
#include<iostream>
#include<stack>
#include<string>
using namespace std;
class a
{
public:
a():c(new int[10])
{

}
~a()
{
//delete []c;//这里不释放
}
protected:
int *c;
};
class b:public a
{
public:
b():d(new int [100])
{

}
~b()
{
delete []c;//这里可以这么写,释放基类没释放的内存空间
delete []d;
}
private:
int *d;
};
int main()
{
a y;
b z;
return 0;
}

Treazy 2008-09-12
  • 打赏
  • 举报
回复
不用写,析构时,基类析构会被调用
lsldd 2008-09-12
  • 打赏
  • 举报
回复
编译是能通过,运行会导致内存泄漏!
因为类b的成员析构函数会执行2次delete[] c
所以解决方法是使用虚析构函数。见1楼所说。

wangdeqie 2008-09-12
  • 打赏
  • 举报
回复

#include<iostream>
#include<stack>
#include<string>
using namespace std;
class a
{
public:
a():c(new int[10])
{

}
~a()
{
delete []c;
}
protected:
int *c;
};
class b:public a
{
public:
b():d(new int [100])
{

}
~b()
{
delete []c;//这里不应该写,因为c被释放了2次,会报错
delete []d;
}
private:
int *d;
};
int main()
{
a y;
b z;
return 0;
}

xbt746 2008-09-12
  • 打赏
  • 举报
回复
基类析构函数要虚的
继承就不用了
如果不是虚的
就要
除非你是疯子,不然基类用虚析构函数
hahaysw 2008-09-12
  • 打赏
  • 举报
回复

virtual ~a(){delete []c;//少了个virtual

64,266

社区成员

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

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