我这里有一个情况 - 基本上:
#include <iostream>
class A {
public:
virtual void foo()=0;
};
class B : A {
public:
void foo() { cout << "I hate this code." << endl; }
void DoSomething() { /* Code */ }
};
在我的案例中,A 和 B 位于不同的文件中,不用说要复杂得多 - 但这是我的问题:
在类 B 的某处函数(如 DoSomething())中,我调用 foo。现在,foo 是 A 中在 B 中正确定义的纯虚函数,因此它工作正常 - 编译也很好。
如果我这样调用它:
B::foo()
效果很好。
如果我这样调用它:
foo()
它在运行时挂起系统。当函数不是静态的或类似的东西时,为什么作用域运算符会改变结果?
PS:那段代码是我当场写的,没有编译器可以解决这个问题,如果有错别字,请见谅。
最佳答案
代码看起来是正确的。这强烈暗示 vptr 或 vtable 已被某些越界内存访问损坏,或者 this
指针无效。
作用域运算符通过允许它完全绕过虚函数查找来更改调用。
关于c++ - 范围界定运算符是否会改变幕后发生的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7165930/