Condividi tramite


Avviso C26444

Non provare a dichiarare una variabile locale senza nome (es.84).

Linee guida di base di C++

ES.84: Non dichiarare una variabile locale senza nome

Una dichiarazione di variabile senza nome crea un oggetto temporaneo che viene rimosso alla fine dell'istruzione. Tali oggetti temporanei con comportamento non intermedio possono puntare a codice inefficiente che alloca e genera immediatamente risorse o al codice che ignora involontariamente i dati nonprimitivi. A volte può anche indicare una dichiarazione chiaramente errata.

Osservazioni:

  • Questa regola rileva i tipi con un distruttore scritto manualmente o un distruttore generato dal compilatore che chiama in modo transitivo un distruttore scritto a mano.
  • Questa regola può contrassegnare il codice che richiama un costruttore nontriviale di un tipo RAII.
  • La logica ignora temporaneamente se vengono usate nelle espressioni di livello superiore. Un esempio è temporaneamente passato come argomenti o usato per richiamare una funzione.

Nome dell'analisi del codice: NO_UNNAMED_RAII_OBJECTS

Esempi

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).
}

Per risolvere il problema, convertire l'oggetto temporaneo in locale.

struct A { A(int i); ~A(); };
void Foo()
{
    A guard{42}; // OK.
}

Vedi anche

C26441
ES.84: Non dichiarare una variabile locale senza nome