Upozornění C26402
Return a scoped object instead of a heap-allocated if it has a move constructor (r.3).
Poznámky
Aby nedošlo k nejasnostem o tom, zda ukazatel vlastní objekt, funkce, která vrací pohyblivý objekt, by měla přidělit objekt v zásobníku. Potom by měl vrátit objekt podle hodnoty místo vrácení objektu přiděleného haldou. Pokud se vyžaduje sémantika ukazatele, místo nezpracovaného ukazatele vraťte inteligentní ukazatel. Další informace naleznete v tématu C++ Core Guidelines R.3: Varovat, pokud funkce vrátí objekt, který byl přidělen v rámci funkce, ale má konstruktor přesunutí. Místo toho doporučujeme zvážit vrácení hodnoty.
Příklad
Tento příklad ukazuje bad_example
funkci, která vyvolá upozornění C26409. Ukazuje také, jak funkce good_example
tento problém nezpůsobuje.
// C26402.cpp
struct S
{
S() = default;
S(S&& s) = default;
};
S* bad_example()
{
S* s = new S(); // C26409, avoid explicitly calling new.
// ...
return s; // C26402
}
// Prefer returning objects with move contructors by value instead of unnecessarily heap-allocating the object.
S good_example() noexcept
{
S s;
// ...
return s;
}