Megosztás:


Figyelmeztetés C26444

Ne próbáljon meg név nélküli helyi változót deklarálni (es.84).

C++ alapvető irányelvek

ES.84: Ne próbáljon név nélküli helyi változót deklarálni

A névtelen változódeklaráció létrehoz egy ideiglenes objektumot, amely az utasítás végén el lesz vetve. Az ilyen, nemtriviális működésű ideiglenes objektumok vagy nem hatékony kódra mutathatnak, amely lefoglalja és azonnal eldobja az erőforrásokat, vagy arra a kódra, amely véletlenül figyelmen kívül hagyja a nemprimittív adatokat. Néha az is előfordulhat, hogy egyértelműen helytelen deklarációt jelez.

Megjegyzések

  • Ez a szabály kézzel írt destruktort vagy fordító által létrehozott destruktort tartalmazó típusokat észlel, amelyek átvitt módon kézzel írt destruktort hívnak meg.
  • Ez a szabály megjelölheti azokat a kódot, amelyek egy RAII típusú nemtriviális konstruktort hívnak meg.
  • A logika ideiglenesen kihagyja őket, ha magasabb szintű kifejezésekben használják őket. Ilyenek például az argumentumként átadott vagy függvények meghívására használt ideiglenesek.

Kódelemzés neve: NO_UNNAMED_RAII_OBJECTS.

Példák

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

A probléma megoldásához konvertálja az ideiglenes objektumot helyire.

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

Lásd még

C26441
ES.84: Ne próbáljon név nélküli helyi változót deklarálni