在编译时或静态分析期间强制执行std :: nothrow

时间:2015-06-22 07:45:41

标签: c++ pc-lint

是否可以在编译时或至少在使用pc-lint的静态分析期间严格使用new运算符std::nothrow?使用c ++(GCC)4.8.3 20140911(Red Hat 4.8.3-9)编译器。

1 个答案:

答案 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;
          ^

请注意,这仅适用于可以看到此自定义声明的代码。您可能想要检查您使用的任何库的代码,包括标准库。