类的大小
空类大小:
#include<iostream>
using namespace std;
class ClassA
{};
class ClassB
{
ClassB()
{
}
};
class ClassC
{
~ClassC()
{
}
};
class ClassD
{
ClassD()
{
}
~ClassD()
{
}
};
int main()
{
//输出类大小
cout << sizeof(ClassA) << endl;//1
cout << sizeof(ClassB) << endl;//1
cout << sizeof(ClassC) << endl;//1
cout << sizeof(ClassD) << endl;//1
system("pause");
}
以上几种空类大小输出结果都为1.
类中含有虚函数时:
#include<iostream>
using namespace std;
class ClassA
{
virtual void funA();
};
class ClassB
{
virtual void funA();
virtual void funB();
};
int main()
{
//类大小
cout << sizeof(ClassA) << endl;// 4(32位机器),也就是一个指针的大小
cout << sizeof(ClassB) << endl;// 4,不管有几个虚函数,都和一个虚函数大小一样
system("pause");
}
类中只有虚函数时,在32位机器中,类的大小变为4,一个指针所占内存的大小,这个指针会指向虚函数表VTABLE.
多重继承的空类大小:
class A
{
};
class A2
{
};
class B: public A
{
};
class C: public virtual B
{
};
class D :public A,public A2
{
};
cout<<sizeof(A)<<sizeof(B)<<sizeof(C)<<sizeof(D);
输出结果为1,1,4,1
sizeof实例:
char var[10];
int test(char var[])
{
return sizeof(var);
}
函数返回值是4,因为var[]等价于*var,一个指针的大小。
class B
{
float f;
char c;
int da[3];
};
cout<<sizeof(B);
输出结果为20;内存对齐,所以char c也会分配4个字节,4+4+4*3=20。