空類,虛函式類,虛繼承類的空間大小

2021-06-10 03:25:52 字數 462 閱讀 4693

#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 請看下面的...