3.0 C++远征:虚函数与虚析构函数实现原理

2-7虚函数与虚析构函数实现原理

[TOC]

1.虚函数的实现原理

(1)引入概念:函数指针

指向函数的指针——函数指针。 函数指针指向函数的内存地址。

(2)多态的实现原理

虚函数表指针

​ vftable_ptr,4字节,指向一张虚函数表的首地址。

虚函数表

​ 表中存放各虚函数入口地址,此地址指向虚函数。

​ 派生类中如果定义了同名虚函数,派生类中的虚函数表存放的此虚函数入口地址是派生类中定义的,则将基类的同名虚函数覆盖。即为多态的实现原理。

(3)函数的覆盖与隐藏

函数的隐藏

​ 派生类中的函数与基类的函数同名,即为隐藏。

函数的覆盖

​ 派生类中的虚函数与基类的虚函数同名,即为覆盖。

(4)虚析构函数的实现原理

现象:

​ 使用基类的指针指向派生类的对象,通过delete释放基类的内存,执行完基类的析构函数,就会执行派生类的析构函数。

本质

​ 使用基类的指针指向派生类的对象,通过delete删除基类指针的时候,基类通过虚函数表指针找到虚函数表,再通过虚函数表找到派生类的析构函数,从而执行派生类的析构,之后系统自动实现基类的析构。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容