为什么一般看到的析构函数都是空的?空的析构函数作些什么工作?

hshhgh 2003-07-31 09:45:20
为什么一般看到的析构函数都是空的?空的析构函数作些什么工作?
...全文
785 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
MyNameEPC 2003-08-03
  • 打赏
  • 举报
回复
什么都不干,人家放在那是为了使代码看上去更清晰,以后要添加或者改变源代码也方便些,反正C++就是你不写这个空的析构函数,也会自动有一个什么都不干的。
  • 打赏
  • 举报
回复
一般情况下,不需要析 构函数的,但是我想是,一般系统(默认情况下),会自动地为您 的程序释放空间的,您不用再增加析构函数的,但 是一个好的习惯,是要加上自已的析构函数的,
其中有一点是,如果是动态分配是一定加上析构函数来手动的释放空间的,因为是堆分配的话,系统在运行完之前是不会 释放内存的,
您 说的空的析构函数是什么也不做了,只是在执行是会释放内存,与默认是一样的
yeahspyme 2003-08-03
  • 打赏
  • 举报
回复
空析构函数编译器会加代码吧。
如果在程序种你用new分配了空间,就要在destructor()内自己把它delete。
Goldbach 2003-08-03
  • 打赏
  • 举报
回复
空的析构函数用于释放类的实例和类中预定义的数据和变量,
另外,它还是一个代码框架,用户可以添加自己释放资源的代码并做好一切的善后工作。:-)
zcchm 2003-08-03
  • 打赏
  • 举报
回复
如果在类继承体系中,基类的虚析构函数就非常重要了。

//1 基类没有virtual destructor
//********************************
class Base
{
public:
Base();
~Base();
};

class Derive:public Base
{
private:
char *pt;
public:
Derive(){ pt = new char[100] };
~Derive(){ delete pt; };
};

main()
{
Base *pB = new Derive();
delete pB;//有问题,Derive的析构函数不被执行,造成pt指向内存无法回收。
}
//********************************
//2 下面就不会出现这种情况了
class Base
{
public:
Base();
virtual ~Base(); //virtual
};

class Derive:public Base
{
private:
char *pt;
public:
Derive(){ pt = new char[100] };
~Derive(){ delete pt; };
};

main()
{
Base *pB = new Derive();
delete pB;//ok 因为基类的virtual destructor, 保证执行Derive的析构函数。
}

hshhgh 2003-08-03
  • 打赏
  • 举报
回复
大家继续呀...
ckp 2003-08-01
  • 打赏
  • 举报
回复
空的析构函数用于释放类的实例和类中预定义的数据和变量,
另外,它还是一个代码框架,用户可以添加自己释放资源的代码并做好一切的善后工作。:-)
matrix195 2003-08-01
  • 打赏
  • 举报
回复
vc++里的析构函数不是有默认的吗?
如果是空的话,就可以用默认的,为什么还要写一个空的函数
我以为一般在使用了堆空间的时候,这个对象要析构,才需要一个有函数代码的析构函数
hshhgh 2003-08-01
  • 打赏
  • 举报
回复
恭请大家继续讨论...
magic007 2003-07-31
  • 打赏
  • 举报
回复
在一般情况下,空的析构函数的确并不需要。
而如果考虑到继承,则基类需要增加一个virtual destructor,即使函数体为空
evergreensky 2003-07-31
  • 打赏
  • 举报
回复
up
lieyanfriend 2003-07-31
  • 打赏
  • 举报
回复
有的时候编译器会为你加点东西的。虽然表面上看起来是空的,但是实际上里面已经添了不知道多少的代码。
nKannan 2003-07-31
  • 打赏
  • 举报
回复 1
确实是什么也不做,但是由于释放对象的时候需要调用一下析构函数,所以至少要有一个空函数,否则链接的时候会不过。
hshhgh 2003-07-31
  • 打赏
  • 举报
回复
既然这个析构函数是空的,什么都不做,那还要这个析构函数干什么?
fierygnu 2003-07-31
  • 打赏
  • 举报
回复
magic007(无名)对。
ZZH1983 2003-07-31
  • 打赏
  • 举报
回复
析构函数是在一个类的对象超出某一个生存域时调用的。
你可以在这个函数里加一点你要在销毁一个对象是要执行的代码。
我的理解时:他没有必要有参数。

65,210

社区成员

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

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