当前位置:   article > 正文

C++-虚函数表是针对类的还是针对对象的?同一个类的两个对象的虚函数表是怎么维护的?_多个派生类对象共用一个虚函数表吗

多个派生类对象共用一个虚函数表吗

回答如下:

  • 虚函数表(Virtual Function Table)针对类,而不是对象。

  • 每一个类都有一张虚函数表,存储中这个类所有虚函数的入口地址。同一个类的两个对象共享类的虚函数表。当一个对象被创建时,它会在内存中分配一块空间用于存储对象数据和指向虚函数表的指针。这个指针始终指向该类的虚函数表,不会因为对象的不同而改变。

  • 如果派生类重写了基类的虚函数,那么派生类会在其自己的虚函数表中存储重写后的函数地址。如果派生类没有重写基类的虚函数,那么它会继承基类的虚函数地址,并将其复制到自己的虚函数表中。

  • 如果存在多重继承的情况,则派生类会生成多个虚函数表的指针,分别维护来自不同基类的虚函数表,其规则和单继承相同。

总之,虚函数是针对类的,同一个类的两个对象共享同一张虚函数表,虚函数表的内容由类的层次结构和重载情况决定。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/244127
推荐阅读
相关标签
  

闽ICP备14008679号