Aviso C26410

O parâmetro 'parâmetro' é uma referência ao ponteiro exclusivo const, use const T* ou const T& em vez disso (r.32)

Geralmente, as referências ao ponteiro const unique não têm nenhum efeito. Elas podem ser substituídas com segurança por uma referência bruta ou um ponteiro. Esse aviso impõe a regra R.32 das Diretrizes Principais do C++.

Comentários

  • As verificações de ponteiro exclusivo têm critérios bastante amplos para identificar ponteiros inteligentes. A regra R.31 das Diretrizes Principais do C++: se você tiver ponteiros inteligentes não padrão, siga o padrão básico do std que descreve os conceitos de ponteiro exclusivo e ponteiro compartilhado. A heurística é simples, mas pode levar a surpresas: um tipo de ponteiro inteligente é qualquer tipo que define um operator-> ou operator*outro . Um tipo copiável (ponteiro compartilhado) deve ter um construtor de cópia pública ou um operador de atribuição sobrecarregado que lida com um parâmetro de referência não-Rvalue.

  • O código do modelo pode produzir avisos barulhentos. Lembre-se que os modelos podem ser instanciados com vários parâmetros de tipo com diferentes níveis de indireção, incluindo referências. Alguns avisos podem não ser óbvios e as correções podem exigir algum retrabalho dos modelos (por exemplo, remoção explícita de indireção de referência). Se o código do modelo for intencionalmente genérico, o aviso poderá ser suprimido.

Nome da análise de código: NO_REF_TO_CONST_UNIQUE_PTR

Exemplo

Referência desnecessária:

std::vector<std::unique_ptr<Tree>> roots = GetRoots();
std::for_each(
    roots.begin(),
    roots.end(),
    [](const auto &root) { Rebalance(root.get()); });   // C26410