2015-06-22 2 views
0

Возможно ли принудительное использование оператора new с std::nothrow во время компиляции или, по крайней мере, во время статического анализа с использованием pc-lint? Использование компилятора C++ (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9).принудительно использовать std :: nothrow во время компиляции или во время статического анализа

ответ

1

Да, это возможно. 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; 
     ^

ли к сведению, однако, что это относится только к коду, в котором эта таможенная декларация видна. Вы можете проверить код любых библиотек, которые вы используете, включая стандартную библиотеку.

Смежные вопросы