是否有可能访问虚拟指针,即指向多态类中虚拟表的指针。是否有可能访问多态类中的虚拟指针
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