因为被头问起,前阵子研究了下关于空类指针的调用是否会报错的问题。
详细的情况是这样。
空指针调用类成员,有几种情况,普通函数一旦访问类成员,则一定会抛出异常。这是绝大多数的情况。但如果函数没有访问任何类成员,这个函数调用就会成功。(估计这样的函数也不太多-_-) 静态成员函数基本等同于全局函数,所以也可以通过。而对虚函数的调用则不论是否访问类成员都会导致异常的抛出,因为虚函数要访问虚表指针。
但这些也都不是绝对的,如果所访问的类成员的偏移量超过了65535,就会越过操作系统的禁入内存区。则照样可以避开操作系统的检查而不会抛出任何异常。(注意这里指windows32位操作系统) 当然,这么大的类一般情况下其实是没有的。
但这种情况显然是不好的,改写不该改写的内存,或者读取了错误的信息,结果都将是不确定的。
无论是否能够通过,都不应该出现使用空指针的情况。
在逻辑完整正确的情况下,显然不应该出现这种情况,如果哪个程序员能犯下这种错误,那么几乎毫无疑问的,他的代码必然存在着无数的bug,等待他或他的团队的恐怕将是无穷无尽的痛苦调试。
这里只是研究一下空指针使用可能出现的情况,估计真的会犯这种错误的程序员大概不多吧。