Можно ли навязать использование оператора? new
строго с std::nothrow
во время компиляции или хотя бы во время статического анализа с использованием pc-lint? Использование компилятора 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: в функции int main (): h.cc:6:10: ошибка: объявлен вызов оператора «new» с ошибкой атрибута: используйте вместо него новый (std :: nothrow) новый int; ^
Однако обратите внимание, что это относится только к коду, в котором видна эта пользовательская декларация. Вы можете проверить код любых библиотек, которые вы используете, включая стандартную библиотеку.