当前位置: 首页 > news >正文

【多态】为什么析构函数的名称统一处理为destructor?

析构函数的名称统一处理为destructor的目的是为了解决析构函数的重写
而这又引出了一个问题:为什么要进行析构函数的重写?
是为了下面这种情况:

class Person
{
public:~Person() { cout << "~Person" << endl; }
};
class Student : public Person
{
public:~Student() { cout << "~Student" << endl; }
};
int main()
{Person* p = new Person;delete p;p = new Student;delete p;return 0;
}

打印结果:
在这里插入图片描述


上面的代码可能存在内存泄漏的问题:
原因:p = new Student; delete p;这段代码我们本意是想调用student的析构函数(在继承中,调用派生类的析构函数时,会自动调用基类的析构函数。即调用student的析构函数 = 调用student的析构函数 + person的析构函数),但它却只是调用了person的析构函数。

即:
本意:根据指针(引用)指向的对象类型来选择对应的析构函数
结果:根据指针(引用)的类型的来选择对应的析构函数


而根据指针(引用)指向的对象类型来选择对应的函数,这不就是多态的理念吗。
此时我们已经满足多态构造的2个条件的其中之一:基类的指针或引用, 剩下的我们需要满足派生类的析构函数构成基类析构函数的重写。而重写的条件是:返回值类型,函数名,参数列表都相同。对于析构函数,我们需要的就是函数名相同,因此将析构函数的名称统一处理为destructor.


处理后:
在这里插入图片描述

http://www.lryc.cn/news/173782.html

相关文章:

  • 6.4 Case Studies - A Simple Logging Archive Class
  • 【深度学习实验】前馈神经网络(九):整合训练、评估、预测过程(Runner)
  • 002-第一代硬件系统架构确立及产品选型
  • Go基础语法:指针和make和new
  • 039_小驰私房菜_Camera perfermance debug
  • Caché for Windows安装及配置
  • 代码随想录算法训练营20期|第四十六天|动态规划part08|● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!
  • 系统安装(一)CentOS 7 本地安装
  • obsidian使用指南
  • 【ardunio】青少年机器人四级实操代码(2023年9月)
  • MYSQL的存储过程
  • [kubernetes/docker] failed to resolve reference ...:latest: not found
  • 彻底解决win11系统0x80070032
  • 解决因为修改SELINUX配置文件出错导致Faild to load SELinux poilcy无法进入CentOS7系统的问题
  • flask中的跨域处理-方法二不使用第三方库
  • 矿山定位系统-矿井人员定位系统在矿山自动化安全监控过程中的应用
  • JS-ECharts-前端图表 多层级联合饼图、柱状堆叠图、柱/线组合图、趋势图、自定义中线、平均线、气泡备注点
  • 【eslint】屏蔽语言提醒
  • 【python】入门第一课:了解基本语法(数据类型)
  • csa从初阶到大牛(练习题2-查询)
  • 【视觉SLAM入门】8. 回环检测,词袋模型,字典,感知,召回,机器学习
  • SpringBean的生命周期
  • uni-app 之 picker选择器
  • 整合车辆出险报告Api接口,轻松管理车险理赔!
  • eNSP基础网络学习-v02
  • mac环境安装多个node版本(可切换)
  • Linux 操作技巧
  • 一个电子信息工程学生的历程和内心感想
  • 【zookeeper】zk集群安装与启动踩坑点
  • 【计算机网络】 拥塞控制