警告 C26444
名前のないローカル変数 (es.84) を宣言しないでください。
C++ Core Guidelines
名前のない変数宣言は、ステートメントの最後に破棄される一時オブジェクトを作成します。 このような非トリガー動作の一時オブジェクトは、リソースを割り当ててすぐにスローする非効率的なコード、または非特権データを意図せずに無視するコードを指している可能性があります。 また、宣言が明らかに間違っている可能性があります。
解説
- このルールは、手書きデストラクターまたはコンパイラによって生成されたデストラクターを持つ型を検出します。このデストラクターは、手動で記述されたデストラクターを推移的に呼び出します。
- この規則では、RAII 型の非トリガー コンストラクターを呼び出すコードにフラグを設定できます。
- ロジックは、上位レベルの式で使用されている場合、一時的な処理をスキップします。 1 つの例として、引数として渡される、または関数の呼び出しに使用される一時キーがあります。
コード分析名: 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.
}