我正在使用clang静态分析器(clang ++ --analyze或clang-tidy,win64,v6.0.1)。
在这种情况下,语言分析器可以检测到空取消引用:
class SomeClass {
public:
int a = 5;
};
int GetA( SomeClass* someClass ) {
return someClass->a;
}
int main() {
SomeClass* someClass = nullptr;
return GetA( someClass );
}
但不是这个:
class SomeClass {
public:
int a = 5;
};
int GetA( SomeClass* someClass ) {
return someClass->a;
}
SomeClass* someClass = nullptr;
int main() {
return GetA( someClass );
}
我不熟悉clang-tidy,想念什么吗?
致谢
答案 0 :(得分:2)
我可以从PVS-Studio分析仪开发人员的角度给您答案。 PVS-Studio分析仪在第一种情况下类似地检测到错误,而在第二种情况下则保持安静。通过使变量成为全局变量,可以大大增加与使用此变量有关的错误检测难度。全局变量可以在任何地方更改,并且很难跟踪何时以及在什么条件下会发生这种情况。很多时候甚至最好不要尝试。
例如,您可以通过以下方式初始化变量。
@OneToOne(cascade = { CascadeType.MERGE, CascadeType.REMOVE,
CascadeType.REFRESH, CascadeType.DETACH },
fetch = FetchType.EAGER)
private Company company;
我并不是说这是变量初始化的正确方法。我只想表明一切在什么程度上都不明显。
无论如何,这是不使用全局变量的另一个原因。全局变量是祸害。