使用sizeof计算虚拟继承的类对象的空间大小

#include 

using namespace std;

class A
{

};

class B
{

};

class C : public A, public B
{

};

class D : virtual public A
{

};

class E : virtual public A, virtual public B
{

};

class F
{
public:
    int a;
    static int b;
};

int F::b = 10;

int main() {

    cout << "sizeof(A) = " << sizeof(A) << endl;
    cout << "sizeof(B) = " << sizeof(B) << endl;
    cout << "sizeof(C) = " << sizeof(C) << endl;
    cout << "sizeof(D) = " << sizeof(D) << endl;
    cout << "sizeof(E) = " << sizeof(E) << endl;
    cout << "sizeof(F) = " << sizeof(F) << endl;

    return 0;
}
  1. 由于A是空类,编译器会安插一个char给空类,用来标记它的每一个对象。因此其大小为1个字节。
  2. 类B大小和A相同,都是一个字节。
  3. 类C是多重继承自A和B,其大小仍然为1个字节。
  4. 类D是虚继承自A,编译器为该类安插一个指向父类的指针,指针大小为4。由于此类有了指针,编译器不会安插一个char了。因此其大小为4个字节。
  5. 类E虚继承自A并且也虚继承自B,因此它有指向父类A的指针与父类B的指针,加起来大小为8个字节。
  6. 类F含有一个静态成员变量,这个静态成员的空间不在类的实例中,而是像全局变量一样在静态存储区中,被每一个类的实例共享,因此其大小是4个字节。

你可能感兴趣的:(C++面试,c++)