2011-03-18 57 views

回答

3

一般來說,不,標準對於如何實現虛擬調度是不可知的,因此就其而言,virtual類可能甚至沒有vptr和vtable。

vptr是一個實現細節,你應該看看你的編譯器文檔來檢查是否有一個文檔化的方式來訪問它(但我從來沒有聽說過編譯器構建這樣做),否則你必須看看裝配輸出以確定其位置。

出於好奇,你爲什麼需要訪問vptr?

+0

我想在運行時通過代碼推送我的一個實現,儘管這僅僅是爲了實驗目的。 – Zuzu 2011-03-19 08:03:26

2

由於多態性和動態調度的實現是實現特定的,因此沒有可移植的方法來做到這一點。

1

許多編譯器把vtable指針放在類的開頭,所以你可以通過將你的類指針轉換爲一個指針指針並檢索它來得到它。

但是正如已經指出的那樣,您必須意識到這是特定於實現的,所以如果您選擇不同的編譯器版本或不同的目標平臺,它可能會隨機分裂 - if你很幸運,它會崩潰。如果不是,那麼在某個地方會出現一個微妙的錯誤,你會花費很多時間去嘗試調試。

當您在其上使用虛擬繼承時,這會變成雙倍。

相關問題