首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
在什么情况下,析构函数需要是虚函数?
[问答题]
在什么情况下,析构函数需要是虚函数?
查看答案及解析
添加笔记
求解答(0)
邀请回答
收藏(178)
分享
纠错
9个回答
添加回答
5
MayYu
若存在类的继承关系,而且基类指针指向派生类对象时,一般需要将析构函数声明为虚函数,不然在使用基类指针进行析构时会无法调用派生类的析构函数而造成内存泄漏等问题
如果不存在继承关系,而且不需要使用多态的特性时,就不要将析构函数声明为虚函数,因为虚函数本身实现需要额外的花销(如vptr),在类本身比较小时,会造成很大额外花销的比例.
一般,不要继承String,Vector等库类,因为他们本身为了达到较高的效率,没有将析构函数声明为虚函数,这样如果继承了会造成上述的问题.
发表于 2015-06-25 15:24:20
回复(0)
3
ChrisNewbie
1.若该类有基类存在的情况下,需要将析构函数声明为虚函数。否则会使得基类无法析构导致内存泄露。
2.若该类无继承关系的时候,则无需将析构函数声明为虚函数。
发表于 2015-07-27 09:08:11
回复(0)
2
沉默的小牛
当你用一个基类指针指向一个动态创建的派生类对象的时候,如果你想delete这个派生类对象,就必须把基类的析构函数写成虚函数,这样就可以调用派生类的析构函数delete掉这个对象了。
发表于 2016-03-29 10:20:52
回复(0)
1
小小娃爱吃甜食
如果派生类自己在堆上申请了空间,且会用到派生类到基类的转化,则有必要将析构函数虚函数化,否则会内存泄露
发表于 2015-07-10 10:03:09
回复(0)
1
Monk
当一个类打算当作基类被其他类所继承时,它的析构函数应该被设计为虚函数。这样保证派生类会调用自身的析构函数,防止内存泄露。
发表于 2015-06-11 15:56:50
回复(0)
0
风意
Base *pb = new Derive;
发表于 2015-07-27 20:27:11
回复(0)
0
万QQ
有继承存在并且析构函数中需要析构某些资源时需要虚析构函数。否则当基类操作派生类时,基类只会调用自己的析构函数,而不能调用子类的析构函数,这样就有可能造成内存泄漏。
发表于 2015-06-18 18:10:25
回复(0)
0
noble4cc
在实现多态时,当用基类指针操作派生类,如果析构函数不是虚函数,基类只会调用自己的析构函数,不会调用子类多点析构函数,这样就有可能造成内存泄露。基类是虚函数,析构时就会调用子类的析构函数。
发表于 2015-06-04 08:27:51
回复(0)
0
陈木木
在存在类继承并且析构函数中需要析构某些资源是析构函数需要是虚函数,否则若使用父类指 针指向子类对象,在delete时只会调用父类的析构函数,而不能调用子类的析构函数,造成内存泄露?
发表于 2015-05-05 14:30:36
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
C++
上传者:
陈木木
难度:
9条回答
178收藏
7505浏览
热门推荐
相关试题
运行 ldd hello 可以得到...
百度
C++
评论
(3)
明明的随机数
数组
评论
(3898)
来自
华为研发工程师编程题
进制转换
字符串
评论
(2542)
来自
华为研发工程师编程题
编译方法中,动态存储分配的含义是:()
编译和体系结构
评论
(2)
来自
乐视2017秋招开发工程...
闪速存储器能提供高性能、低功耗、字...
编程基础
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题