我想尝试看看我的编译器如何为多态类安排v表 - 查看函数地址等。在C ++代码中执行此操作的最佳方法是什么?
例如,如果我覆盖父类的方法,则函数地址应该是子类中的地址。如果我没有覆盖,则函数地址将是父类中的地址。
答案 0 :(得分:0)
如果没有黑客攻击,您无法获取虚拟功能的地址或其他有关vmt的信息。 在大多数情况下,类内部看起来像这样的结构:
struct ClassInternal
{
void* vmt; // this field generate and add by compile automatically if class need vmt
int field0;
...
};
有些编译器按照在标题中定义的顺序对VMT中的地址函数进行排序(但可以随时更改),首先是父类函数然后是子类。