是否有可能訪問虛擬指針,即指向多態類中虛擬表的指針。是否有可能訪問多態類中的虛擬指針
0
A
回答
3
一般來說,不,標準對於如何實現虛擬調度是不可知的,因此就其而言,virtual
類可能甚至沒有vptr和vtable。
vptr是一個實現細節,你應該看看你的編譯器文檔來檢查是否有一個文檔化的方式來訪問它(但我從來沒有聽說過編譯器構建這樣做),否則你必須看看裝配輸出以確定其位置。
出於好奇,你爲什麼需要訪問vptr?
2
由於多態性和動態調度的實現是實現特定的,因此沒有可移植的方法來做到這一點。
1
許多編譯器把vtable指針放在類的開頭,所以你可以通過將你的類指針轉換爲一個指針指針並檢索它來得到它。
但是正如已經指出的那樣,您必須意識到這是特定於實現的,所以如果您選擇不同的編譯器版本或不同的目標平臺,它可能會隨機分裂 - if你很幸運,它會崩潰。如果不是,那麼在某個地方會出現一個微妙的錯誤,你會花費很多時間去嘗試調試。
當您在其上使用虛擬繼承時,這會變成雙倍。
相關問題
- 1. 指向虛擬成員函數的指針是否可比?
- 2. 純虛擬對象是否有指向vtbl的指針?
- 3. 是否有可能訪問
- 4. 從基指針的C++虛擬類?
- 5. 成員函數指針指向未指定的類類型 - 是否有可能?
- 6. C#中是否有虛擬類?
- 7. 是否有可能從另一臺虛擬機中殺死Java虛擬機?
- 8. 多繼承:虛擬指針的類的大小?
- 9. 如何檢查一個指針是否指向一個虛擬基類而不是C++中的子類?
- 10. Java中是否有「智能指針」?
- 11. 是否有可能有一個指針指向第一個指針所指向的變量的指針?
- 12. 虛擬函數表指針的大小是多少?
- 13. 是否有可能重寫指向C++中的對象的指針的數組訪問運算符?
- 14. 是否有可能找出變量名稱,指向的指針?
- 15. 具有智能指針的虛擬構造函數成語
- 16. 刪除智能指針,但仍可以訪問指針?
- 17. 類有虛函數和可訪問的非虛擬析構函數
- 18. 多態性基類指針
- 19. 鼠標指針在Genymotion虛擬機中不可見/可用
- 20. 是否有可能在java中的父類中訪問子類的變量?
- 21. 訪問虛擬盒
- 22. 虛擬表格指針和虛擬表格模擬
- 23. 是否有可能在Fortran的類型構造函數中使用指針?
- 24. C++指針模板類具有(虛擬)繼承
- 25. 是否可以在類中創建虛擬類聲明?
- 26. C指針是指物理地址還是虛擬地址
- 27. 是否有可能改進有界多態類型?
- 28. 是否有可能讓ntpd在虛擬機上工作?
- 29. 是否有可能使App_GlobalResources成爲虛擬目錄?
- 30. 是否有可能將函數指針保存在std :: vector中?
我想在運行時通過代碼推送我的一個實現,儘管這僅僅是爲了實驗目的。 – Zuzu 2011-03-19 08:03:26