含有虛函式的空類的記憶體大小

2021-08-03 17:17:50 字數 737 閱讀 8944

01 #include

02 using namespace std;

0304 class base1

06 virtual void fun11(){}

07 public:

08 virtual ~base1();

09 };

1011 class base2

13 };

1415 class derivedfromone: public base2

16 18 virtual void fun22(){}

19 };

2021 class derivedfromtwo: public base1, public base2

22 24 };

2526 void main()

27 輸出:

4,4,4,8

說明:

1)乙個類中若有虛函式,(不論是自己的虛函式,還是繼承而來的),那麼類中就有乙個成員變數:虛函式指標,這個指標指向乙個虛函式表,虛函式表的第一項是類的typeinfo資訊,之後的項為此類的所有虛函式的位址。

2)假設經過成員對齊後的類的大小為size個位元組。那麼類的sizeof大小可以這麼計算:size + 4*(虛函式指標的個數n)。**中,derivedfromtwo繼承自2個分支,所以有2個虛函式指標,所以sizeof大小為0 + 4* 2 = 8。

3)帶有虛函式的類的sizeof大小,實際上和虛函式的個數不相關,相關的是虛函式指標。

c 空類,含有虛函式的類的大小

1 為何空類的大小不是0呢?為了確保兩個不同物件的位址不同,必須如此。類的例項化是在記憶體中分配一塊位址,每個例項在記憶體中都有獨一無二的二位址。同樣,空類也會例項化,所以編譯器會給空類隱含的新增乙個位元組,這樣空類例項化後就有獨一無二的位址了。所以,空類的sizeof為1,而不是0.2 請看下面的...

含有虛函式,虛繼承的類的大小

當類中含有虛繼承時 在vs環境下,linux環境下有歧義 1.派生類物件中會新增乙個指標,該指標指向虛繼承的基類,稱為虛類指標 cptr 每乙個指標只指向其中乙個虛繼承的類,也就是說,虛繼承了幾個類,就會有幾個cptr。2.父類當中的成員變數 虛函式指標 vptr 虛類指標 cptr 仍然會被複製到...

含有虛函式的類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 ...