C++ 典型题

-
-
2026-02-03 10:19

问:以下代码能否运行,为什么?

#include <stdio.h>

class A
{
public:
	void doSome()
	{
		printf("doSome\n");
	}
};

int main()
{
	A* a = nullptr;
	a->doSome();

	return 0;
}

答:可以,这里看似A是空的,调用doSome会崩溃,实际上非虚成员函数是编译期静态绑定,调用时仅传递 nullptr 作为 this 指针,而doSome内部未访问 this 指针,无空指针解引用操作。牢记两个崩溃边界:

  • 非虚成员函数内部访问 this 指针(如访问成员变量),调用 nullptr 会崩;
  • 虚成员函数无论是否访问 this 指针,调用 nullptr 都会崩(依赖虚函数表,需解引用)。


清遥
遥夜泛清瑟,西风生翠萝。
微博热搜榜Top10

加载中...
最新评论

加载中...