派生类的内存大小(sizeof)举例

版权声明:本文为博主原创文章,未经博主允许不得转载。 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)。
猜测和初步验证,欢迎批评指正。

猜你喜欢

转载自blog.csdn.net/houzijushi/article/details/82083026