社区
C++ 语言
帖子详情
问一个基础问题,请高手深入解释一下,谢谢!
navy_koo
2005-08-27 11:43:15
C++中当一个类打算被用作其它类的基类时,它的析构函数必须是虚的!
几乎每本C++书中都有这句话,我想知道其真正的原因?
可能问题有点菜,还请各位大侠给小弟详细解释一下,谢谢!!!
另外,我想看一下C++中有关堆栈分配方面的书,可否推荐一下!!!
...全文
354
11
打赏
收藏
问一个基础问题,请高手深入解释一下,谢谢!
C++中当一个类打算被用作其它类的基类时,它的析构函数必须是虚的! 几乎每本C++书中都有这句话,我想知道其真正的原因? 可能问题有点菜,还请各位大侠给小弟详细解释一下,谢谢!!! 另外,我想看一下C++中有关堆栈分配方面的书,可否推荐一下!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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的时候会报错的。
Android开发者值得
深入
思考的几个
问
题
,赶快收藏备战金九银十!
如果觉得文章不错,烦
请
点个关注转发,
谢谢
! 公司的需求 不同的公司,不同的需求现在的市场上,公司很多,大致上可以归纳为两个大类:大公司和小公司,他们招聘时对人才的需求也不一样。 小公司 小公司他们一般急需...
从零
基础
成为深度学习
高手
——Ⅰ
本文共9876字,阅读约需14分钟,有兴趣的朋友
请
耐心阅读,
谢谢
!近期许良在公司内部做了
一个
关于人工智能/深度学习相关的主题分享讲座,为了准备这个演讲,花了100个小时左右,接下来就把精心准备的内容分享给大家。...
ASP的第一天的结束,把自己看的视频内容草草的记了一下!若有
高手
谢谢
指点!
windows套接字就是固定是由IP+端口 就能确定
一个
服务器了。web服务器的为80为默认,FTP为21 WEB应用程序的周期: 一、WEB应用程序的功能(WHY?) 二、用什么设计(contrive?) 三、怎么做(HOW?) 四、生产...
深入
浅出程序设计竞赛 -
基础
篇_Re: 从零开始的程序设计竞赛(三)
Re: 从零开始的程序设计竞赛顾名思义,是
一个
力图介绍完全没有接触过程序设计竞赛的学校、老师及学生进入比赛的文章。文章包含如何参加比赛以及训练如何安排等内容。你可以查看过往的几期内容:Re: 从零开始的程序...
总结Linux
基础
知识和常用渗透命令!!!
Web安全想要入门容易,想成为大佬难,通常分为三个阶段,第
一个
阶段是脚本小子,通过弱口令等操作拿权;第二个阶段是代码审计或自己写代码进行Web渗透;第三个阶段是进行漏洞挖掘,通过更
深入
的分析发现0day漏洞或...
C++ 语言
64,636
社区成员
250,540
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章