Condividi tramite


Avviso C26402

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

Osservazioni:

Per evitare confusione sul fatto che un puntatore sia proprietario di un oggetto , una funzione che restituisce un oggetto mobile deve allocarla nello stack. Deve quindi restituire l'oggetto in base al valore anziché restituire un oggetto allocato dall'heap. Se è necessaria la semantica del puntatore, restituire un puntatore intelligente anziché un puntatore non elaborato. Per altre informazioni, vedere C++ Core Guidelines R.3: Warn if a function restituisce un oggetto allocato all'interno della funzione ma ha un costruttore di spostamento. Suggerire invece di restituirlo in base al valore.

Esempio

Questo esempio mostra una bad_example funzione che genera l'avviso C26409. Mostra anche come la funzione good_example non causa questo problema.

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