关于 VF 表的真相¶
为了简化解释,我说 VF 表钩子能拦截对函数的所有调用有点撒谎。实际上,只有当虚函数以给编译器留下合理类型歧义的方式被调用时,才会遍历 VF 表。例如,通过 inst->function() 调用格式调用函数时会遍历 VF 表。当虚函数以 编译器确定类型的方式调用(比如 inst.function() 或类似),不 会遍历 VF 表,因为编译器会知道函数地址。相反,从 inst 以引用传递的作用域调用 inst.function() 会触发 VF 表遍历。在尝试部署 VF 表钩子之前,确保你要钩的函数调用存在类型歧义。