社区
C++ 语言
帖子详情
为什么一般看到的析构函数都是空的?空的析构函数作些什么工作?
hshhgh
2003-07-31 09:45:20
为什么一般看到的析构函数都是空的?空的析构函数作些什么工作?
...全文
785
16
打赏
收藏
为什么一般看到的析构函数都是空的?空的析构函数作些什么工作?
为什么一般看到的析构函数都是空的?空的析构函数作些什么工作?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
MyNameEPC
2003-08-03
打赏
举报
回复
什么都不干,人家放在那是为了使代码看上去更清晰,以后要添加或者改变源代码也方便些,反正C++就是你不写这个空的析构函数,也会自动有一个什么都不干的。
数据结构与算法学习、智能算法
2003-08-03
打赏
举报
回复
一般情况下,不需要析 构函数的,但是我想是,一般系统(默认情况下),会自动地为您 的程序释放空间的,您不用再增加析构函数的,但 是一个好的习惯,是要加上自已的析构函数的,
其中有一点是,如果是动态分配是一定加上析构函数来手动的释放空间的,因为是堆分配的话,系统在运行完之前是不会 释放内存的,
您 说的空的析构函数是什么也不做了,只是在执行是会释放内存,与默认是一样的
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
打赏
举报
回复
析构函数是在一个类的对象超出某一个生存域时调用的。
你可以在这个函数里加一点你要在销毁一个对象是要执行的代码。
我的理解时:他没有必要有参数。
为什么
析构函数
必须是虚函数?为什么默认的
析构函数
不是虚函数?
微信搜索“编程笔记本”,获取更多信息 ------------- codingbook2020 ------------- 今天我们来谈一谈面试 C++ 工程师时经常被谈到的一个问题:为什么
析构函数
必须是虚函数?为什么默认的
析构函数
不是虚函数? 首先,我们看一下百度百科对虚函数是怎么定义的: 在某基类中声明为 virtual并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual...
为什么父类的
析构函数
必须是虚函数,而C++默认的
析构函数
不是虚函数?
为什么父类的
析构函数
必须是虚函数,而C++默认的
析构函数
不是虚函数? 因为当我们用基类指针指向new出来的子类时,根据动态绑定可以确保子类新添加的部分也可以被顺利释放掉,以防出现内存泄漏。 而默认的
析构函数
不是虚函数的原因是因为:虚函数需要额外的虚函数表和虚表指针,会占用格外内存,对于不会有子类的类来说,这个是没有必要的。 虚函数和虚表指针:https://blog.twofei.com/496/ ...
哪类
析构函数
必须是虚函数,为什么?为什么C++默认的
析构函数
不是虚函数?
将可能会被继承的父类的
析构函数
设置为虚函数,可以保证当我们new一个子类,然后使用基类指针指向该子类对象,释放基类指针时可以释放掉子类的
空
间,防止内存泄漏。 C++默认的
析构函数
不是虚函数是因为虚函数需要额外的虚函数表和虚表指针,占用额外的内存。而对于不会被继承的类来说,其
析构函数
如果是虚函数,就会浪费内存。因此C++默认的
析构函数
不是虚函数,而是只有当需要当作父类时,设置为虚函数。 ...
C++默认的
析构函数
不是虚函数?
析构函数
必须是虚函数?
虚
析构函数
:基类指针指向子类对象,用基类指针删除子类对象 纯虚
析构函数
:需要类内声明,类外实现,含之抽象类,不可实例化 C++默认的
析构函数
不是虚函数?
析构函数
必须是虚函数? C++默认的
析构函数
不是虚函数目的:节省内存 虚函数需要额外的虚函数表和虚表指针,占用额外的内存。对于不会被继承的类来说,将析构设置成虚函数会浪费内存。只有需要当作父类时,设置成虚函数
析构函数
必须是虚函数:防止内存泄漏 当一个类作为父类,需要被继承,才把它的
析构函数
设置为虚函数, 子类有开辟到堆区的属性,父类指针走不到子类的
析构函数
【002 函数】虚函数、
析构函数
,为什么
析构函数
必须是虚函数? C++默认的
析构函数
不是虚函数?
C++默认的
析构函数
不是虚函数是因为虚函数需要额外的虚函数表和虚表指针,占用额外的内存。而对于不会被继承的类来说,其
析构函数
如果是虚函数,就会浪费内存。因此C++默认的
析构函数
不是虚函数,而是只有当需要当作父类时,设置为虚函数。将可能会被继承的父类的
析构函数
设置为虚函数,可以保证当我们new一个子类,然后使用基类指针指向该子类对象,释放基类指针时可以释放掉子类的
空
间,防止内存泄漏。
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章