若char是1字节,int是4字节,指针类型是4字节,代码如下:
class CTest
{
public:
CTest():m_chData(‘\0’),m_nData(0)
{
}
virtual void mem_fun(){}
private:
char m_chData;
int m_nData;
static char s_chData;
};
char CTest::s_chData=’\0’;
问:
(1)若按4字节对齐sizeof(CTest)的值是多少?
(2)若按1字节对齐sizeof(CTest)的值是多少?
解题思路:
1、先找有没有virtual函数,有的话就要建立虚函数表+4
2、static的成员变量属于类域,不算入对象中+0
3、神马成员都没有的类,或者只有成员函数+1 (一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节而不是5字节)
答案:
(1)结果是12= 4(虚表指针)+1(char )+3(对齐补位)+4(int)
(2)结果是9 =4(虚表指针)+1(char )+4(int)