class C1
{
};
C1 的大小为1 。当类中无任何成员变量时,编译器会给他分配1 字节空间。
class C2
{
private :
int x;
};
C1 的大小为4 。
class C3
{
private :
void f(){};
};
C3 的大小为1 。普通成员函数不占用对象的空间
class C4
{
public :
virtual void f(){};
};
C4 的大小为4 。当虚函数存在,会分配一个指针指向虚函数表
class C5
{
public :
virtual void f1(){};
virtual void f2(){};
virtual void f3(){};
};
C5 的大小为4 。分配一个指针指向虚函数表,虚函数表中会有指针分别指向C5::f1(), C5::f2(), C5::f3() 的地址
class C6
{
private :
string str1;
};
C6 的大小为0x1Ch 。String 的大小就是0x1Ch
class C7 : public C4
{
};
C7 的大小为4 。虚函数表中指针指向C4::f()
class C8 : public C4
{
public :
virtual void f(){};
};
C8 的大小为4 。虚函数表中指针指向C8::f()
class C9 : public C4, public C5
{
public :
virtual void f(){};
};
C9 的大小为8 。他有两个指针分别指向来自C4 和C5 的虚函数表
class C10 : public C4
{
public :
virtual void f1(){};
};
C10 的大小为4 。在虚函数表后会附加上C10 自身的虚函数C10::f1()
class C11
{
private :
char c1;
char c2;
int i;
char c3;
};
C10 的大小为0x0Ch 。由于需要内存对齐,c1,c2 占用4 字节,i 占用4 字节,c3 占用4 字节
class C12
{
private :
char c1;
static int x;
};
C12 的大小为1 。Static 成员变量不占用对象的空间
class C13
{
private :
char c1;
const int x;
};
C13 的大小为8 。const 成员变量占用对象的空间,其中const 变量在类初始化时在初始化表中初始化,不同对象的const 成员变量的值完全可能不一样
class C14
{
private :
char c1;
static const int x;
};
C14 的大小为1 。