경고 C26444
이름(es.84)이 없는 지역 변수를 선언하지 마세요.
C++ Core Guidelines
ES.84: 이름 없이 지역 변수를 선언하지 마세요(시도).
명명되지 않은 변수 선언은 문 끝에 삭제되는 임시 개체를 만듭니다. 비기능적 동작이 있는 이러한 임시 개체는 리소스를 할당하고 즉시 throw하는 비효율적인 코드 또는 의도치 않게 비초적 데이터를 무시하는 코드를 가리킬 수 있습니다. 경우에 따라 명시적으로 잘못된 선언을 나타낼 수도 있습니다.
설명
- 이 규칙은 손으로 쓴 소멸자 또는 손으로 쓴 소멸자를 전이적으로 호출하는 컴파일러 생성 소멸자가 있는 형식을 검색합니다.
- 이 규칙은 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.
}