第一:空类的大小
class CBase
{
};
运行cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl;
输出
sizeof(CBase)=1;
为什么空的什么都没有是1呢?
先了解一个概念:类的实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址。同样空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了。所以空类的sizeof为1。
第二:一般非空类大小
class CBase
{
int a;
char *p;
};
运行结果:
sizeof(CBase)=8
第三:有虚函数类
class CBase
{
public:
CBase(void);
virtual ~CBase(void);
private:
int a;
char *p;
};
运行结果:
sizeof(CBase)=12
“C++ 类中有虚函数的时候有一个指向虚函数的指针(vptr),在32位系统分配指针大小为4字节”。
第四:有虚函数类的继承
基类就是上面的了不写了
class CChild :
public CBase
{
public:
CChild(void);
~CChild(void);
private:
int b;
};
运行结果:
sizeof(CChild)=16;
可见子类的大小是本身成员变量的大小加上父类的大小。
另外:
1. 空类
class A
{
};
void main()
{
printf("sizeof(A): %d\n", sizeof(A));
getchar();
}
得到结果为:1。
类的实例化就是给每个实例在内存中分配一块地址。空类被实例化时,会由编译器隐含的添加一个字节。所以空类的size为1。
2.虚函数
class A
{
virtual void FuncA();
virtual void FuncB();
};
得到结果:4
当C++