C++标准规定类的大小不为0,空类的大小为1,当类不包含虚函数和非静态数据成员时,其对象大小也为1。
对有虚函数的类来说,必须为它的对象提供运行时类型信息(RTTI,Run-Time Type Information)和关于虚函数表的信息,常见的做法是在对象中放置一个指向虚函数表的指针,此外,为了支持RTTI,许多编译器都把该类型信息放在虚函数表中。但是,是否必须采用这种实现方法,C++标准没有规定,主流编译器均采用的一种方案。
虚函数、成员函数[包括静态与非静态]、和静态数据成员都是不占用对象的存储空间的
对象大小 = 虚函数指针 + 所有非静态数据成员大小 + 因对齐而多占的字节
例子:
#include <iostream>
using namespace std;
class A{};
class B{
char ch;
void func() { }
};
class C
{
char ch1; //占用1字节
char ch2; //占用1字节
virtual void func() { }
};
class D
{
int in;
virtual void func() {}
};
int main()
{
A a;
B b;
C c;
D d;
cout << sizeof(a) << endl;//result=1
cout << sizeof(b) << endl;//result=1
cout << sizeof(c) << endl;//result=8
cout << sizeof(d) << endl;//result=8
}