避免无效的空指针检查
14.9 ID_invalidNullCheck
当指针的值一定不为空时,再对其进行检查是没有意义的,往往意味着逻辑错误。
示例:
if (int* p = new int[100]) { // Non-compliant
....
} else { // Invalid
....
}
标准规定默认 new 运算符的返回值不会为空,如果分配失败则抛出异常,所以这种检查和相关错误处理是无效的。
应改为:
if (int* p = new(std::nothrow) int[100]) { // Compliant
....
} else { // OK
....
}
又如:
if (p) { // Meaningless
delete p;
}
对于可接受空指针的接口,不必总在调用前判断指针是否为空,否则会使代码变得繁琐。delete 关键字或 free 函数可以作用于空指针,调用之前的检查是没有意义的。
相关
依据
ISO/IEC 14882:2003 18.4
ISO/IEC 14882:2011 18.6