运行时的Vtable修改
Vtable modifications at run time
对于那些使用vtables的编译器实现:是否存在在运行时更改虚拟函数表的情况?还是vtables只在编译时填充,而在运行时不执行任何操作来修改它们?
我不知道有任何C++ABI具有多态性实现,该实现使用在运行时更改的虚拟表。
无论如何,这并不是很有用,因为虚拟表通常描述代码的一个属性(成员函数在类层次结构中的位置彼此之间的关系),而C++代码在运行时不会改变。
因为它不会有用,所以会浪费。
简短的回答是否定的。
一个稍长的(可能是特定于实现的)答案是,在派生多态类的构造函数和析构函数的执行过程中,对象指向实际vtable的指针会发生变化,因此派生类中的重写方法不会在派生类尚未构造/已被析构函数时由基类的构造函数/析构函数执行。
如果你想让对象在运行时改变类,那么你有很多选择:
-
objective-c(++)
-
手动编码您自己的调度机制
-
python/javascript等。
-
(最好的选择)重新考虑你的设计。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 独立读取-修改-写入顺序
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 修改函数中的指针(将另一个指针作为参数传递)
- 为什么我可以通过引用修改常量返回
- 对于结构,表达式必须是可修改的ivalue
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 修改创建帐户程序
- 我应该如何修改此代码以使用给定字符串中的字母打印菱形图案
- 如何从子成员函数修改父公共成员变量
- 修改 VS Code 中的默认C++代码段
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 如何使用递归打印修改后的星号三角形图案
- 已修改的LinkedList未在文本文件本身中更新
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 为什么可以修改数组 b?
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 运行时的Vtable修改
- 修改VTable表项没有重定向功能