C MFC VC 虛函式表指標的位置

2021-04-14 14:15:04 字數 521 閱讀 1048

編譯器會把一種叫虛指標(vptr)的隱藏資料插入到至少擁有乙個虛函式的類中。 vptr 是一種指向虛函式位址列表的指標。在不同編譯器中, vptr 所在位置是不同的。

一些編譯器(例如:visual c++ 和 c++ builder)把 vptr 放置在類的開頭部分,在所有使用者宣告的資料成員的前面。而另一些編譯器,像gcc 和 dec cxx,把 vptr 放在類的結尾部分,在所有使用者宣告的資料成員的後面。

通常,你不用關心 vptr 位置所在。儘管如此,在某些條件下,在使物件序列化的程式中,vptr 的位置所在還是有些不同影響的。

如何找到vptr 了?首先,得到那個類的乙個物件例項的位址,然後把這個位址與同乙個物件例項的第乙個資料成員的位址相比較。如果兩者相同,那麼, vptr 就有可能是在末尾;如果後者的數值比前者大的話,那麼, vptr 就是放在開頭部分了。

用下面的程式來查明你的編譯器把 vptr 放置在何處的:

class a

int n;             

};int main()

虛函式表指標,虛函式表

對c 了解的人都應該知道虛函式 virtual function 是通過一張虛函式表 virtual table 來實現的。簡稱為v table。在這個表中,主是要乙個類的虛函式的位址表,這張表解決了繼承 覆蓋的問題,保證其容真實反應實際的函式。這樣,在有虛函式的類的例項中這個表被分配在了 這個例項...

虛函式表的位置

引言 近日 csdn的 c c 語言 版的乙個問題 引 起了我的注意 請問虛函式表放在 我也曾經思考過這個問題,零零散散也有一定的收穫,這次正好趁這個機會把我對這一部分的理解整理一下。首先值得宣告的是,本文的編譯環境是vs2002 winxp。c 標準並沒有對虛函式的實現作出任何的說明,甚至都沒有提...

虛函式表和虛函式表的指標

有虛函式的類都有乙個虛函式表,它是實現多型的關鍵。虛函式表可以繼承,如果子類沒有重寫虛函式,那麼子類虛函式表中仍然會有該函式的位址,只不過這個位址指向的是基類的函式實現。如果子類重寫了相應的虛函式,那麼虛函式表中的位址就會改變,指向自身的函式實現。如果派生類中有自己的虛函式,那麼虛函式表中會新增該項...