不应判断 this 指针是否为空
14.20 ID_this_zeroComparison
正常情况下 this 指针不会为空,而且判断 this 指针是否为空会影响编译器对 this 指针的优化,造成难以预料的后果。
在某些环境中通过空指针调用非静态成员函数时,this 指针可能为空,但这并不是语言标准规定的,通过空指针访问对象成员所导致的行为均是未定义的。值得强调的是,任何情况下都不应逃避解引用空指针造成的问题。
示例:
struct A {
int x = 0;
int getX() {
return this? x: 0; // Non-compliant
}
};
A* p = foo();
// Suppose an error has occurred and a null pointer is returned
cout << p->getX() << '\n';
假设 foo 函数不应返回空指针,而某个错误导致其返回了空指针,程序本应崩溃,而 getX 函数可能会逃避崩溃,非但不能真正地解决问题,反而使问题难以定位,使程序难以调试,大大降低了可维护性。