Avertissement C26402

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

Notes

Pour éviter toute confusion quant au fait qu’un pointeur possède un objet, une fonction qui retourne un objet mobile doit l’allouer sur la pile. Il doit ensuite retourner l’objet par valeur au lieu de renvoyer un objet alloué au tas. Si la sémantique du pointeur est requise, retournez un pointeur intelligent au lieu d’un pointeur brut. Pour plus d’informations, consultez C++ Core Guidelines R.3 : Avertir si une fonction retourne un objet qui a été alloué dans la fonction, mais possède un constructeur de déplacement. Suggèrez plutôt de le renvoyer par valeur.

Exemple

Cet exemple montre une fonction qui déclenche l’avertissement bad_example C26409. Elle montre également comment la fonction good_example n’entraîne pas ce problème.

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