3个问题:
sizeof一个空类是多大?为什么?编译器为什么这么做?
在这个类中添加一个virtual函数后再sizeof,这时是多大?为什么?
将这个类再virtual继承一个其它的空类,这是多大?为什么?
class A { }; class B { virtual void print() { cout << "B" << endl; } }; class C : public A { virtual void print() { cout << "C" << endl; } }; int main() { cout << sizeof(A) << endl; cout << sizeof(B) << endl; cout << sizeof(C) << endl; return 0; }
结论:
1.对象是存在于内存中的实体,编译器必须为其分配内存空间(C++编译器还为每个类默认生成了&取地址运算符函数)。所以如果是空类,编译器也会分配一个字节。
2.如果在空类中加入一个virtual函数后,类对象的内存空间为vfptr(指向虚函数表的指针),不再需要插入一个字节。
3.继承一个空类时,空类的“那一个字节”是不会存在派生类中的