#include
using
namespace std;
class a
//a是空類,編譯器會用乙個char型別標記這個類,大小為1
;class b:
public a
//b繼承了a,但同樣也是空類,大小為1
;class c:
virtual
public a
//虛擬繼承的時候編譯器會安插乙個指向父類的指標,大小為4
;class d
//大小為4
;class e
//print函式不佔記憶體空間,大小為4
;class f
//虛函式會占用乙個指標大小的記憶體,系統需要用這個指標維護虛函式表。大小為8
;class g:
public f
//多了乙個虛函式記憶體大小不變,可見乙個類只有乙個虛函式指標。大小為8
類的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 若類中包含成員,則類物件的大小只包括...
含有虛函式,虛繼承的類的大小
當類中含有虛繼承時 在vs環境下,linux環境下有歧義 1.派生類物件中會新增乙個指標,該指標指向虛繼承的基類,稱為虛類指標 cptr 每乙個指標只指向其中乙個虛繼承的類,也就是說,虛繼承了幾個類,就會有幾個cptr。2.父類當中的成員變數 虛函式指標 vptr 虛類指標 cptr 仍然會被複製到...
c 空類,含有虛函式的類的大小
1 為何空類的大小不是0呢?為了確保兩個不同物件的位址不同,必須如此。類的例項化是在記憶體中分配一塊位址,每個例項在記憶體中都有獨一無二的二位址。同樣,空類也會例項化,所以編譯器會給空類隱含的新增乙個位元組,這樣空類例項化後就有獨一無二的位址了。所以,空類的sizeof為1,而不是0.2 請看下面的...