Sdílet prostřednictvím


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;
}