社区
C++ 语言
帖子详情
问一个基础问题,请高手深入解释一下,谢谢!
navy_koo
2005-08-27 11:43:15
C++中当一个类打算被用作其它类的基类时,它的析构函数必须是虚的!
几乎每本C++书中都有这句话,我想知道其真正的原因?
可能问题有点菜,还请各位大侠给小弟详细解释一下,谢谢!!!
另外,我想看一下C++中有关堆栈分配方面的书,可否推荐一下!!!
...全文
371
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页面,
谢谢
!
NULL 博文链接:https://12345678.iteye.com/blog/1055868
电力营销工作个人年终述职报告范文.docx
电力营销工作个人年终述职报告范文.docx
“Java全栈
高手
,场景应对如鱼得水!“
马小帅,你好,欢迎参加我们公司的Java开发岗位面试。首先,我想了解一下你对Java技术栈的了解程度。:嗨,面试官,您好!我对Java技术栈还是挺熟悉的,Java SE、Maven、Gradle这些我都用过。:很好。那我们先从
基础
开始。你能
解释一下
JVM的工作原理吗?:嗯,JVM是Java虚拟机,它负责执行Java代码。简单来说,它将Java字节码转换成机器码来运行。:回答得不错。接下来,谈谈你对Maven和Gradle的理解。:Maven和Gradle都是构建工具,它们可以自动化项目的构建过程。
2024年网络安全学习指南!详尽路线图,从零
基础
到黑客
高手
的进阶之路!
40等级保护之Linux系统安全加固(上) 41 渗透测试之网络安全跨站脚本攻击介绍-XSS...。2、PHP
基础
语法(函数、变量、常量、注释、数据类型、流程控制、算术运算)2、数据库基本操作 创建、查看、选中、查库表、删除数据库等相关命令行操作。49 DDoS–DDoS、CC、SYN–Linux安全三大攻...。06 CentOS7.x模板机封装有系统优化/与攻防环...。07 CentOS7.x模板机封装有系统优化/与攻防环...。3、HTML 标签、框架、表格、列表、表单、图像、背景讲解。
零
基础
逆向破解教程之图文!-第三课【脱壳破解】
今天要讲的内容加入了“壳”,在这里我推荐新手尽量使用脱壳机进行脱壳。说到了使用脱壳机,很多人又要吐槽了。在你们吐槽之前,我要提前
解释一下
为什么推荐使用脱壳机。既然是新手,既然是菜鸟,就要利用工具的便利,手动脱壳确实需要学习,但不是现在,现在最重要的是“兴趣”!有些人要说了“新手就要先学手动脱壳!”那我想说“难道脱壳机是给
高手
用的?
高手
需要脱壳机吗?” 先知道了壳是怎么回事,知道有壳与无壳的区别后...
C++ 语言
65,198
社区成员
250,522
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章