C++ 类的size,虚函数相关

图片说明
为什么BC的size都是4呢
难道不应该BC各有两个虚函数表的指针嘛

和编译器有关系,这里输出8

 #include <iostream>
using namespace std;
class A
{
public:
virtual void a() {}
};
class B : public A
{
    public:
    virtual void b() {}
};
class C : public A
{
    public:
    virtual void c() {}
};
int main()
{
cout << sizeof(B) << endl;
cout << sizeof(C) << endl;  
}

https://tool.lu/coderunner/

https://blog.csdn.net/gukesdo/article/details/7593754
是只有一个虚函数表指针,因为是 非虚继承的单继承
(什么最省空间原则后,子类的虚函数指针和非虚继承的父类的虚函数指针可以当做放在同一个虚函数表里,只要一个虚函数表指针)
(虚继承就不能这样)
继承的时候到底有几个虚函数表 看情况的,具体在链接中
答的都不是我想知道的,就不采纳了

非虚函数类sizeof为1,虚函数就为4

B、C是各有两个不同虚函数表的指针,sizeof(B)是指指针地址的大小都是4,如B的指针地址是0x12345678,sizeof(0x12345678)=4

只有一个虚表,基类的也这个表里

虚表指针, 指向存放虚表函数指针的数组. 数组指针4字节. 图片说明