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

不应判断 this 指针是否为空

14.20 ID_this_zeroComparison
目录 › next › previous

正常情况下 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 函数可能会逃避崩溃,非但不能真正地解决问题,反而使问题难以定位,使程序难以调试,大大降低了可维护性。

相关

ID_nullDerefInScp

参考

CWE-1025
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.