空類的sizeof,有乙個虛函式的類的sizeof

2021-06-25 17:27:49 字數 865 閱讀 8518

題目(二):執行下面的**,輸出是什麼?

class a ;

class b

~b() {}

};

class c

virtual ~c() {}

};

int _tmain(int argc, _tchar* argv)

答案是1, 1, 4

。class a

是乙個空型別,它的例項不包含任何資訊,本來求

sizeof

應該是0

。但當我們宣告該型別的例項的時候,它必須在記憶體中占有一定的空間,否則無法使用這些例項。至於占用多少記憶體,由編譯器決定。

visual studio 2008

中每個空型別的例項占用乙個

byte

的空間。

class b

在class a

的基礎上新增了建構函式和析構函式。由於建構函式和析構函式的呼叫與型別的例項無關(呼叫它們只需要知道函式位址即可),在它的例項中不需要增加任何資訊。所以

sizeof(b)

和sizeof(a)

一樣,在

visual studio 2008

中都是1。

class c

在class b

的基礎上把析構函式標註為虛函式。

c++的編譯器一旦發現乙個型別中有虛函式,就會為該型別生成虛函式表,並在該型別的每乙個例項中新增乙個指向虛函式表的指標。在

32位的機器上,乙個指標佔

4個位元組的空間,因此

sizeof(c)是4

類的sizeof(虛函式,虛繼承,空類是1)

1 空類的sizeof是1。空類是指沒有成員的類,類中的函式不佔空間,除非是虛函式。如 class a a void fun sizeof a 是1.注 class a1 a1 void fun char a 0 sizeof a1 也是1.vc6.0下編譯 2 若類中包含成員,則類物件的大小只包括...

含有虛函式的類sizeof大小

01 include 02 using namespace std 04 class base1 06 virtual void fun11 07 public 08 virtual base1 09 11 class base2 13 15 class derivedfromone public ...

含有虛函式的類sizeof大小

說明 1 乙個類中若有虛函式,不論是自己的虛函式,還是繼承而來的 那麼類中就有乙個成員變數 虛函式指標,這個指標指向乙個虛函式表,虛函式表的第一項是類的typeinfo資訊,之後的項為此類的所有虛函式的位址。2 假設經過成員對齊後的類的大小為size個位元組。那麼類的sizeof大小可以這麼計算 s...