虛函式表

虛函式表是一塊連續的記憶體,每個記憶體單元中記錄一個JMP指令的地址。

虛函式

C++中的虛函式的實現一般是通過虛函式表(C++規範並沒有規定具體用哪種方法,但大部分的編譯器廠商都選擇此方法)。

類的虛函式表是一塊連續的記憶體,每個記憶體單元中記錄一個JMP指令的地址。

注意的是,編譯器會為每個有虛函式的類創建一個虛函式表,該虛函式表將被該類的所有對象共享。類的每個虛成員占據虛函式表中的一行。如果類中有N個虛函式,那么其虛函式表將有N*4位元組的大小。

虛函式(Virtual Function)是通過一張虛函式表來實現的。簡稱為V-Table。在這個表中,主要是一個類的虛函式的地址表,這張表解決了繼承、覆蓋的問題,保證其真實反應實際的函式。這樣,在有虛函式的類的實例中分配了指向這個表的指針的記憶體,所以,當用父類的指針來操作一個子類的時候,這張虛函式表就顯得尤為重要了,它就像一個地圖一樣,指明了實際所應該調用的函式。

編譯器應該是保證虛函式表的指針存在於對象實例中最前面的位置(這是為了保證取到虛函式表的有最高的性能——如果有多層繼承或是多重繼承的情況下)。 這意味著可以通過對象實例的地址得到這張虛函式表,然後就可以遍歷其中函式指針,並調用相應的函式。

相關詞條

熱門詞條

聯絡我們