简单的继承与虚继承在内存中的存储方式

以下均在VS2013 中测试说明
对于查看方式:cl /d1 reportSingleClassLayout类名 源文件名
虚函数指针(vfptr)指向虚函数表,虚函数表中存储函数地址
虚基表指针(vbptr)指向虚基表,虚基表中存储着继承变量的偏移量
虚函数指针和虚基表指针是两个不同的概念
只有虚继承才会有虚表指针,只要有虚函数就会有虚函数指针。
普通继承,子类不管是否新增虚函数,子类不会创建自己的虚函数指针。而是继承了父类的虚函表,虚函数指针显示的是来自继承的父类的(除非父类没有虚函数,子类有虚函数,此时虚函数指针属于子类自己)。
虚继承,只要是虚继承,一定有虚基表指针,子类新增虚函数的话,子类会创建属于自己的单独的虚函数指针。
图1
图2
图3
图4
图5
图6
图7
图8
图9
图10
图11
图12

posted @ 2022-09-29 19:41  J1nu  阅读(38)  评论(0)    收藏  举报