空指针对象调用成员函数一定崩溃吗?

今天阅读书籍,上面写了一句话,“得到一个空指针,继续调用成员函数会导致程序崩溃”。

这句话似乎写的比较草率。我在实践中有过空指针调用成员函数不崩溃的情况,当然,用空指针去调用成员函数,肯定是不合理的。只不过,不一定会崩溃。

比如:

class A
{
public:
	void func(bool a)
	{
		std::cout << "A::func()" << std::endl;

		if (a)
		{
			std::cout << m_i << std::endl;
		}
	}

private:
	int m_i = 0;
};

如果这样调用:

A *a = nullptr;

a->func(true);

那么的确会崩溃。但是如果是 a->func(false); 则不会崩溃。原因是没有用到成员变量,也就是没有读取非法地址。仅仅调用一个函数,是合法的,函数的地址是静态的,所有的对象的成员函数地址都一样。

原文地址:https://www.cnblogs.com/demon90s/p/15575908.html