计算类的的大小时只考虑成员变量的大小,而不考虑成员函数的大小!
但是如果类中含有虚函数,那么在计算类的大小时就要额外的加上4个字节!这4个字节是虚函数表占的字节数!
在计算类的大小时还要注意一点就是 内存对齐!
看一个例子:
class
CTest
{
char ch ;
} ;
{
char ch ;
} ;
// sizeof
(CTest)
=
1
class
CTest
{
char ch ;
int num ;
} ;
{
char ch ;
int num ;
} ;
// sizeof(CTest) = 8
很奇怪,为什么第二个CTest的大小是8字节了,这里就涉及到了内存对齐问题
int的大小为 4字节, 由于内存所以ch的填充3个字节!所以CTest的大小为8字节
再来看一列:
class
CTest
{
char ch ;
int num ;
double b ;
} ;
{
char ch ;
int num ;
double b ;
} ;
// sizeof(CTest) = 16
这里ch+num=5字节,填充到b的大小,也就是8字节!
class CTest
{
char ch;
double b;
int num;
};
// sizeof(CTest) = 24
这里ch和num都填充到了8字节
继承类大小
class
CT1()
{
int num ;
} ;
class CT2 : public CT1
{
int val ;
} ;
// sizeof(CT2) = 4+4 = 8;
{
int num ;
} ;
class CT2 : public CT1
{
int val ;
} ;
// sizeof(CT2) = 4+4 = 8;
sizeof (继承类) = 本身成员变量+父类的大小,如果是虚拟继成的话,则另外加一个指向父类指针的大小.
如果两个类C1,C2分别继承了含有虚函数的类C3,类C4同时继承C1和C2,那么在C4只保留一份指向虚基类C3的指针