применять std :: nothrow во время компиляции или во время статического анализа

Можно ли навязать использование оператора? new строго с std::nothrow во время компиляции или хотя бы во время статического анализа с использованием pc-lint? Использование компилятора c ++ (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9).

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: в функции int main ():
h.cc:6:10: ошибка: объявлен вызов оператора «new» с ошибкой атрибута: используйте вместо него новый (std :: nothrow)
новый int;
^

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

2

Другие решения


По вопросам рекламы [email protected]