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