Compartilhar via


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