虛函式空間大小

2021-07-13 04:13:57 字數 638 閱讀 6359

class no_virtual

int 

fun2() const

private:

int a;

}class one_virtual

int 

fun2() const

private:

int a;

}class two_virtual

virtual int 

fun2() const

private:

int a;

}以上三個類中:

no_virtual沒有虛函式,sizeof(no_virtual)=4,類no_virtual的長度就是其成員變數整型a的長度;

one_virtual有乙個虛函式,sizeof(one_virtual)=8;

two_virtual有兩個虛函式,sizeof(two_virtual)=8; 有乙個虛函式和兩個虛函式的類的長度沒有區別,其實它們的長度就是no_virtual的長度加乙個void指標的長度,它反映出,如果有乙個或多個虛函式,編譯器在這個結構中插入乙個指標( v p t r)。在one_virtual 和two_virtual之間沒有區別。這是因為v p t r指向乙個存放位址的表,只需要乙個指標,因為所有虛函式位址都包含在這個表中。

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

include using namespace std class a a是空類,編譯器會用乙個char型別標記這個類,大小為1 class b public a b繼承了a,但同樣也是空類,大小為1 class c virtual public a 虛擬繼承的時候編譯器會安插乙個指向父類的指標,大...

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

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

c 類大小(涵蓋繼承 虛繼承 虛函式表)

涉及到c 中求類大小時需要特別注意一下幾點 為類的非靜態成員資料的型別大小之和 有編譯器額外加入的成員變數的大小,用來支援語言的某些特性 如 指向虛函式的指標 虛繼承 多重繼承 為了優化訪問效率,進行的邊緣調整 與類中的建構函式,析構函式以及其他的成員函式無關 5.私有繼承,會去繼承之前的私有成員變...