我正在尝试使用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
对象在哪里分配?
有什么想法吗?