社区
C++ 语言
帖子详情
问一个基础问题,请高手深入解释一下,谢谢!
navy_koo
2005-08-27 11:43:15
C++中当一个类打算被用作其它类的基类时,它的析构函数必须是虚的!
几乎每本C++书中都有这句话,我想知道其真正的原因?
可能问题有点菜,还请各位大侠给小弟详细解释一下,谢谢!!!
另外,我想看一下C++中有关堆栈分配方面的书,可否推荐一下!!!
...全文
364
11
打赏
收藏
问一个基础问题,请高手深入解释一下,谢谢!
C++中当一个类打算被用作其它类的基类时,它的析构函数必须是虚的! 几乎每本C++书中都有这句话,我想知道其真正的原因? 可能问题有点菜,还请各位大侠给小弟详细解释一下,谢谢!!! 另外,我想看一下C++中有关堆栈分配方面的书,可否推荐一下!!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zousoft
2005-08-27
打赏
举报
回复
对,说白了就是为了让父类和子类的所有析构函数都被调用,其实如果你有兴趣,可以留意一下其他的语言,也都是将析构函数声明成虚拟的,比如Delphi就是,目的是一样的,不过好像Delphi如果不声明成虚拟的,会只调用子类析构而不调用父类的。总之不管是什么顺序,道理都是类似的。
daiweisource
2005-08-27
打赏
举报
回复
// 如果 类B 是由 类A 派生而来
{
A* p;
B b;
p = &b;
}
//如果A的析构函数是虚拟的,则p的生存期结束后,先调用~B(),再调用~A()
//如果~A()是非虚拟的,则只调用~A(),这时,由B()获取的资源就可能不会被正常释放
//这个机制叫做动态联编,可以用搜索引擎找一找更深入的讲解。
v41dugu
2005-08-27
打赏
举报
回复
对不起 我补充一下 我说的调用子类的析构 是指的按照正确的步骤来,就是先调用基类的 然后再调用子类的
fangrk
2005-08-27
打赏
举报
回复
C++中当一个类打算被用作其它类的基类时,它的析构函数必须是虚的
——当通过基类指针删除一个继承类对象时才会调用基类的析构函数。
现在不理解没关系,你就记住好了。
v41dugu
2005-08-27
打赏
举报
回复
这样做是为了通过指向基类的指针访问子类的时候能够正确的调用子类的析构函数 ,而不是调用基类的 实现了多态
karlfly
2005-08-27
打赏
举报
回复
就是为了实现多态
qhfu
2005-08-27
打赏
举报
回复
对不起 我补充一下 我说的调用子类的析构 是指的按照正确的步骤来,就是先调用基类的 然后再调用子类的
=================================================
这也有点扯淡吧!构析应该是先调用子类再调用基类吧!
一凡
2005-08-27
打赏
举报
回复
v41dugu(一步一生) daiweisource(源于代蔚)说的不错。
再告诉你一点,通常要给基类一个虚拟的析构函数,即使它并不需要析构函数
diandian82
2005-08-27
打赏
举报
回复
就是为了析构不同的对象
qhfu
2005-08-27
打赏
举报
回复
这是 c++标准规定!
如果用基类的指针指向子类的对象,delete时, 如果基类的构析不是virtual的话,行为是为定义的!!
navy_koo
2005-08-27
打赏
举报
回复
谢谢各位帮助。
我想知道为什么是必须的,从上面的解释来看,我觉得virtual可以有可以没有啊,事实上如果不是virtual的,程序在run的时候会报错的。
寻找真正的
高手
,帮忙改改HTML页面,
谢谢
!
这个标题"寻找真正的
高手
,帮忙改改HTML页面,
谢谢
!"暗示了博主可能遇到了HTML编码的
问
题
,需要专业人士进行修改。尽管描述部分是空的,我们可以推测博主可能面临的
问
题
包括但不限于布局错误、样式
问
题
、兼容性
问
题
...
电力营销工作个人年终述职报告范文.docx
在团队合作与
问
题
解决方面,我与稽查大队、调通信息中心等部门携手合作,共同解决了系统录入
问
题
,提升了系统维护人员的业务能力,为营销系统的全面稳定运行创造了有利条件。此外,我们还举办了“百
问
百查”学识竞赛...
“Java全栈
高手
,场景应对如鱼得水!“
你能
解释一下
JVM的工作原理吗?:嗯,JVM是Java虚拟机,它负责执行Java代码。简单来说,它将Java字节码转换成机器码来运行。:回答得不错。接下来,谈谈你对Maven和Gradle的理解。:Maven和Gradle都是构建工具,它们...
2024年网络安全学习指南!详尽路线图,从零
基础
到黑客
高手
的进阶之路!
2、PHP
基础
语法(函数、变量、常量、注释、数据类型、流程控制、算术运算)2、数据库基本操作 创建、查看、选中、查库表、删除数据库等相关命令行操作。49 DDoS–DDoS、CC、SYN–Linux安全三大攻...。06 CentOS7...
Android开发者值得
深入
思考的几个
问
题
,赶快收藏备战金九银十!
如果觉得文章不错,烦
请
点个关注转发,
谢谢
! 公司的需求 不同的公司,不同的需求现在的市场上,公司很多,大致上可以归纳为两个大类:大公司和小公司,他们招聘时对人才的需求也不一样。 小公司 小公司他们一般急需...
C++ 语言
65,189
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章