版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/houzijushi/article/details/82083026
派生类的内存大小(sizeof)举例
代码:
#include <iostream>
using namespace std;
class A {
public:
virtual void func1() {}
};
class B {
public:
virtual void func2() {}
};
class C : public A, public B {
public:
virtual void func3() {}
};
int main() {
cout << sizeof(C) << endl;
return 0;
}
运行环境:
ubuntu 16.04,g++ 5.4.0
运行结果:
16
说明:
最底层的派生类,如果有直接基类,则不含虚函数表指针(vptr),其中的虚函数更新或添加到其基类中。如果没有直接基类,则本类中创建虚函数表指针。
上述例子中,A的虚函数表为A::func1(),D::func3(),B中虚函数表为B::func2();
在vs中的内存布局比较简单,虚继承会有虚基类表和虚基类表指针(vbptr)。
猜测和初步验证,欢迎批评指正。