在编译时或静态分析期间强制执行 std::nothrow
enforce std::nothrow at compile time or during static analysis
是否可以在编译时或至少在使用 pc-lint 的静态分析期间严格使用 std::nothrow
来强制使用运算符 new
?使用 c++ (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9) 编译器。
是的,这是可能的。 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;
^
但是请注意,这仅适用于此自定义声明可见的代码。您可能想要检查您使用的任何库的代码,包括标准库。
是否可以在编译时或至少在使用 pc-lint 的静态分析期间严格使用 std::nothrow
来强制使用运算符 new
?使用 c++ (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9) 编译器。
是的,这是可能的。 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; ^
但是请注意,这仅适用于此自定义声明可见的代码。您可能想要检查您使用的任何库的代码,包括标准库。