我在使用引用变量时发现了一个奇怪的行为。
这是类实现:
class Base {
public:
virtual void Method() = 0;
};
class DerivedA : public Base {
public:
virtual void Method() {}
}
class DerivedB : public Base {
public:
virtual void Method() {}
}
这是一个具有奇怪行为的示例代码:
void main(int argc, char *argv[]) {
DerivedA a;
DerivedB b;
Base &base = a;
base.Method(); // Calls DerivedA::Method
base = b;
base.Method(); // Calls DerivedA::Method!!! Why doesn't call DerivedB.Method()?
}
总之,似乎只有在初始化引用变量时才确定与引用变量“关联”的虚函数指针表。如果我重新分配参考变量,vfpt不会改变。
这里会发生什么?