Я экспериментировал с С++ и нашел код ниже как очень странный.
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
?
Любые мысли?