Предупреждение C26444
Не пытайтесь объявить локальную переменную без имени (es.84).
C++ Core Guidelines
ES.84: не объявляйте локальную переменную без имени.
Объявление неназванной переменной создает временный объект, который удаляется в конце инструкции. Такие временные объекты с нетривиальным поведением могут указывать либо на неэффективный код, который выделяет и немедленно выбрасывает ресурсы, либо в код, который непреднамеренно игнорирует непримитивные данные. Иногда это также может указывать на явно неправильное объявление.
Замечания
- Это правило обнаруживает типы с помощью деструктора, созданного компилятором или деструктором, который транзитивно вызывает деструктор, написанный вручную.
- Это правило может пометить код, вызывающий нетривиальный конструктор типа RAII.
- Логика пропускает временные элементы, если они используются в выражениях более высокого уровня. Одним из примеров является временные, передаваемые в качестве аргументов или используемые для вызова функции.
Имя анализа кода: NO_UNNAMED_RAII_OBJECTS
Примеры
struct A { A(int i); ~A(); };
void Foo()
{
A{42}; // warning C26444: Don't try to declare a local variable with no name (es.84).
}
Чтобы устранить проблему, преобразуйте временный объект в локальный.
struct A { A(int i); ~A(); };
void Foo()
{
A guard{42}; // OK.
}