☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

避免无效的空指针检查

14.9 ID_invalidNullCheck
目录 › next › previous

当指针的值一定不为空时,再对其进行检查是没有意义的,往往意味着逻辑错误。

示例:

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 函数可以作用于空指针,调用之前的检查是没有意义的。

相关

ID_repeatedNullCheck

依据

ISO/IEC 14882:2003 18.4 ISO/IEC 14882:2011 18.6
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.