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