Warnung C26402

Return a scoped object instead of a heap-allocated if it has a move constructor (r.3).

Hinweise

Um Verwirrung darüber zu vermeiden, ob ein Zeiger ein Objekt besitzt, sollte eine Funktion, die ein bewegliches Objekt zurückgibt, sie auf dem Stapel zuordnen. Anschließend sollte das Objekt anhand des Werts zurückgegeben werden, anstatt ein vom Heap zugewiesenes Objekt zurückzugeben. Wenn Zeigersemantik erforderlich ist, geben Sie einen intelligenten Zeiger anstelle eines unformatierten Zeigers zurück. Weitere Informationen finden Sie unter C++ Core Guidelines R.3: Warnen, wenn eine Funktion ein Objekt zurückgibt, das innerhalb der Funktion zugewiesen wurde, aber über einen Verschiebungskonstruktor verfügt. Vorschlagen Sie stattdessen, die Rückgabe nach Wert zu erwägen.

Beispiel

Dieses Beispiel zeigt eine bad_example Funktion, die die Warnung C26409 auslöst. Außerdem wird gezeigt, wie diese Funktion good_example dieses Problems nicht verursacht.

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