類對象的sizeof大小

1、
class CBase
{
int a;
char *p;
};cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl;    答案 爲8
2、
 
class CBase
{
};

運行cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl;

sizeof(CBase)=1;實例化,所謂類的實例化就是在內存中分配一塊地址,每個實例在內存中都有獨一無二的地址。同樣空類也會被實例化(別拿豆包不當乾糧,空類也是類啊),所以編譯器會給空類隱含的添加一個字節,這樣空類實例化之後就有了獨一無二的地址了。所以空類的sizeof爲1。

3、添加虛函數後

class CBase
{
public:
CBase(
void);
virtual ~CBase(void);
private:
int a;
char *p;
};

再運行:sizeof(CBase)=12,爲什麼?:“C++ 類中有虛函數的時候有一個指向虛函數的指針(vptr),在32位系統分配指針大小爲4字節“

4、繼承
class CChild :
public CBase
{
public:
CChild(
void);
~CChild(void);
private:
int b;
};

運行:cout<<"sizeof(CChild)="<<sizeof(CChild)<<endl;

輸出:sizeof(CChild)=16;

可見子類的大小是本身成員變量的大小加上子類的大小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章