Предупреждение 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.
}

См. также

C26441
ES.84: не объявляйте локальную переменную без имени.