是否可以在编译时或至少在使用pc-lint的静态分析期间严格使用new
运算符std::nothrow
?使用c ++(GCC)4.8.3 20140911(Red Hat 4.8.3-9)编译器。
答案 0 :(得分:2)
是的,这是可能的。 GCC支持error
属性,这使得任何特定函数的使用都成为一个难题。将此应用于operator new
会产生预期效果。
#include <cstddef>
void *operator new(std::size_t) __attribute__((error("use new(std::nothrow) instead")));
int main() {
new int;
}
编译器拒绝了这一点:
h.cc: In function ‘int main()’: h.cc:6:10: error: call to ‘operator new’ declared with attribute error: use new(std::nothrow) instead new int; ^
请注意,这仅适用于可以看到此自定义声明的代码。您可能想要检查您使用的任何库的代码,包括标准库。