zoukankan      html  css  js  c++  java
  • 3.0 C++远征:虚函数与虚析构函数实现原理

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

    1.虚函数的实现原理

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

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

    (2)多态的实现原理

    虚函数表指针

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

    虚函数表

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

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

    (3)函数的覆盖与隐藏

    函数的隐藏

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

    函数的覆盖

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

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

    现象:

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

    本质

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

  • 相关阅读:
    内存对齐
    类和对象
    C++ 各种继承方式的类内存布局
    静态变量static
    程序内存布局
    String类
    C++与C的区别
    命名空间
    C
    D
  • 原文地址:https://www.cnblogs.com/xiaoqingyang/p/6077536.html
Copyright © 2011-2022 走看看