我正在试验 C++,发现下面的代码很奇怪。
class Foo{
public:
virtual void say_virtual_hi(){
std::cout << "Virtual Hi";
}
void say_hi()
{
std::cout << "Hi";
}
};
int main(int argc, char** argv)
{
Foo* foo = 0;
foo->say_hi(); // works well
foo->say_virtual_hi(); // will crash the app
return 0;
}
我知道虚拟方法调用会崩溃,因为它需要 vtable 查找并且只能使用有效对象。
我有以下问题
- 非虚方法如何
say_hi
在 NULL 指针上工作? - 对象在哪里
foo
分配?
有什么想法吗?