Compartir vía


Advertencia C26402

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

Comentarios

Para evitar confusiones sobre si un puntero posee un objeto, una función que devuelva un objeto movible debe asignarlo en la pila. A continuación, debe devolver el objeto por valor en lugar de devolver un objeto asignado por montón. Si se requiere la semántica del puntero, devuelva un puntero inteligente en lugar de un puntero básico. Para más información, consulte C++ Core Guidelines R.3: Advertir si una función devuelve un objeto asignado dentro de la función, pero tiene un constructor de movimiento. Sugerir considerar devolverlo por valor en su lugar.

Ejemplo

En este ejemplo se muestra una función que genera la bad_example advertencia C26409. También se muestra cómo la función good_example no causa este 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;
}