博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么基类中的析构函数要声明为虚析构函数?
阅读量:4223 次
发布时间:2019-05-26

本文共 1013 字,大约阅读时间需要 3 分钟。

题目

为什么基类中的析构函数要声明为虚析构函数?

解答

用对象指针来调用一个函数,有以下两种情况:

  1. 如果是虚函数,会调用派生类中的版本
  2. 如果是非虚函数,会调用指针所指类型的实现版本

析构函数也会遵循以上两种情况,因为析构函数也是函数嘛,不要把它看得太特殊。 当对象出了作用域或是我们删除对象指针,析构函数就会被调用。

当派生类对象出了作用域,派生类的析构函数会先调用,然后再调用它父类的析构函数, 这样能保证分配给对象的内存得到正确释放。

但是,如果我们删除一个指向派生类对象的基类指针,而基类析构函数又是非虚的话, 那么就会先调用基类的析构函数(上面第2种情况),派生类的析构函数得不到调用

请看例子:

 

输出是:

如果我们把基类的析构函数声明为虚析构函数,这会使得所有派生类的析构函数也为虚。 从而使析构函数得到正确调用。

将基类的析构函数声明为虚的之后,得到的输出是:

因此,如果我们可能会删除一个指向派生类的基类指针时,应该把析构函数声明为虚函数。 事实上,《Effective C++》中的观点是,只要一个类有可能会被其它类所继承, 就应该声明虚析构函数。

转载地址:http://qwkqi.baihongyu.com/

你可能感兴趣的文章
独家 | 一文读懂人工神经网络
查看>>
数据院跨学科交叉人才培养走出国门——中德交换生项目首位社科学子赴德国哥廷根大学交流学习
查看>>
福利 | 13篇精选国外资源合集(技术指南、大咖经验、资源分享...)
查看>>
收藏 | Linux常用156个命令汇总!
查看>>
一文助你解决90%的自然语言处理问题(附代码)
查看>>
独家 | 一文读懂人工神经网络学习原理
查看>>
机器学习在热门微博推荐中的应用
查看>>
数据蒋堂 | 文件的性能分析
查看>>
国家、数据、治理:排列组合文字游戏下的思考(附PPT下载)
查看>>
一文读懂生成对抗网络GANs(附学习资源)
查看>>
值得收藏的45个Python优质资源(附链接)
查看>>
2017年度NLP领域论文TOP10(附链接)
查看>>
精选NLP、CV领域论文TOP10(附链接)
查看>>
数据蒋堂 | DB与NoSQL的访问性能
查看>>
教你简单解决过拟合问题(附公式)
查看>>
非单身勿点,这里是单身汪专属情人节~
查看>>
2018新年快乐 !(附幸运读者名单)
查看>>
大年初一,今年的春晚你看了吗?
查看>>
大年初二,今年过年你选择在男方家过还是女方家过?
查看>>
大年初三,过年期间最让你受不了的习俗有哪些?
查看>>