对于那些使用vtables的编译器实现:是否存在虚函数表在运行时更改的情况?或者vtable仅在编译时填充,在运行时不执行任何操作来修改它们?
发布于 2016-04-17 16:39:03
据我所知,没有任何C++ ABI具有在运行时使用更改虚拟表的多态性实现。
因为虚表通常描述代码的一个属性(成员函数相互之间的关系w.r.t。在类层次中的位置),并且C++代码在运行时不会改变。
因为它不会有用,所以它是浪费的。
发布于 2016-04-17 17:12:30
简短的回答是否定的。
一个稍微长一点的(可能是特定于实现的)答案是,在派生多态类的构造函数和析构函数的执行过程中,对象指向实际vtable的指针会发生变化,因此在派生类尚未构造/析构时,派生类中被覆盖的方法不会被基类的构造函数/析构函数执行。
如果您希望对象在运行时更改类,那么您有许多选择:
https://stackoverflow.com/questions/36674323
复制相似问题