假设我们有一个类C++如何在内存中存储函数和对象?
class A
{
int x;
public:
void sayHi()
{
cout<<"Hi";
}
};
int main()
{
A *a=NULL;
a->sayHi();
}
上面的代码将编译上的Turbo C(其中I测试)和打印Hi
作为输出。
我期待崩溃,因为a
是NULL
。更过,如果我做sayHi()
功能虚拟,它说
Abnormal temination(Segmentation fault in gcc)
我知道有很多是依赖于实现的,但如果任何人都可以扔在任何实现一些轻或只是给出一个概述这将是非常好的。
通过空指针调用方法是未定义的行为。任何事情都可能发生 - 它不必崩溃,但标准允许它。 –
不是C++的人,所以这是一个猜测,但是:你的代码不需要访问任何'A'的实例的内存。 'sayHi()'不使用字段'x',它不是虚拟的,因此它不需要访问vtable来解析。 C++编译器实际上必须插入一个检查来查看'a'是否是导致错误的有效指针。 – millimoose