Aviso C26402
Return a scoped object instead of a heap-allocated if it has a move constructor (r.3).
Comentários
Para evitar confusão sobre se um ponteiro possui um objeto, uma função que retorna um objeto móvel deve alocá-lo na pilha. Em seguida, ela deve retornar o objeto por valor em vez de retornar um objeto alocado por heap. Se for necessário usar semântica de ponteiro, retorne um ponteiro inteligente em vez de um ponteiro bruto. Para obter mais informações, confira Diretrizes Principais do C++ R.3: Avisar se uma função retorna um objeto que foi alocado dentro da função, mas tem um construtor de movimentação. Em vez disso, sugira considerar a devolução por valor.
Exemplo
Este exemplo mostra uma função que gera o bad_example
aviso C26409. Ele também mostra como a função good_example
não causa esse 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;
}
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de