Je faisais des expériences avec C++ et j'ai trouvé le code ci-dessous très étrange.
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;
}
Je sais que l'appel à une méthode virtuelle se plante parce qu'il nécessite une consultation de la table virtuelle et ne peut fonctionner qu'avec des objets valides.
J'ai les questions suivantes
- Comment la méthode non virtuelle *say_hi* fonctionne-t-elle sur un pointeur NULL ?
- Où l'objet foo est alloué ?
Des idées ?