假设我们有一个类
class A
{
int x;
public:
void sayHi()
{
cout<<"Hi";
}
};
int main()
{
A *a=NULL;
a->sayHi();
}
上述代码在Turbo C中编译(我已测试)并输出Hi
。
我本来期望程序会崩溃,因为a
是NULL
。此外,如果我将sayHi()
函数设为虚函数,它会提示:
Abnormal temination(Segmentation fault in gcc)
我知道很多都依赖于具体的实现,但如果有人能够介绍一些具体实现或者提供一个概述,那真是太好了。
A
实例的内存。sayHi()
没有使用字段x
,也不是虚函数,因此不需要访问vtable来解析。实际上,C++编译器必须插入一个检查来查看a
是否为有效指针才会导致错误。 - millimoose