Aviso C26410
O parâmetro 'parâmetro' é uma referência ao ponteiro exclusivo const, use
const T*
ouconst 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->
ouoperator*
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