3.0 C++远征:虚函数与虚析构函数实现原理
2-7虚函数与虚析构函数实现原理
1.虚函数的实现原理
(1)引入概念:函数指针。
指向函数的指针——函数指针。
函数指针指向函数的内存地址。
(2)多态的实现原理
虚函数表指针
vftable_ptr,4字节,指向一张虚函数表的首地址。
虚函数表
表中存放各虚函数入口地址,此地址指向虚函数。
派生类中如果定义了同名虚函数,派生类中的虚函数表存放的此虚函数入口地址是派生类中定义的,则将基类的同名虚函数覆盖。即为多态的实现原理。
(3)函数的覆盖与隐藏
函数的隐藏
派生类中的函数与基类的函数同名,即为隐藏。
函数的覆盖
派生类中的虚函数与基类的虚函数同名,即为覆盖。
(4)虚析构函数的实现原理
现象:
使用基类的指针指向派生类的对象,通过delete释放基类的内存,执行完基类的析构函数,就会执行派生类的析构函数。
本质
使用基类的指针指向派生类的对象,通过delete删除基类指针的时候,基类通过虚函数表指针找到虚函数表,再通过虚函数表找到派生类的析构函数,从而执行派生类的析构,之后系统自动实现基类的析构。