1. 程式人生 > >虛擬函式表(vtbl)和虛表指標(vptr)

虛擬函式表(vtbl)和虛表指標(vptr)

上一篇文還留了個問題沒解決呢:就是關於那個虛擬函式指標的問題。其實這樣稱呼這個指標是不正確的,他確切的應該稱為“虛表指標”。不廢話了直接進入正題吧。

當類中有虛擬函式的時候,編譯器會為類插入一個我們看不見的資料並建立一個表。這個表就是虛擬函式表(vtbl),那個我們看不見的資料就是指向虛擬函式表的指標——虛表指標(vptr)。虛擬函式表就是為了儲存類中的虛擬函式的地址。我們可以把虛擬函式表理解成一個數組,陣列中的每個元素存放的就是類中虛擬函式的地址。當呼叫虛擬函式的時候,程式不是像普通函式那樣直接跳到函式的程式碼處,而是先取出vptr即得到虛擬函式表的地址,根據這個來到虛擬函式表裡,從這個表裡取出該函式的地址,最後呼叫該函式。所以只要不同類的vptr不同,他對應的vtbl就不同,不同的vtbl裝著對應類的虛擬函式地址,這樣虛擬函式就可以完成它的任務了。