Partilhar via


Aviso C26410

O parâmetro «parâmetro» é uma referência a um ponteiro único constante, use const T* ou const T& em vez disso (r.32)

Geralmente, as referências ao ponteiro único const não têm sentido. Eles podem ser substituídos com segurança por uma referência bruta ou um ponteiro. Este aviso impõe a regra R.32 das Diretrizes Principais do C++.

Observações

  • As verificações de ponteiro exclusivas têm critérios bastante amplos para identificar ponteiros inteligentes. A regra R.31 das Diretrizes Principais do C++: Se tiver smart pointers não-std, siga o padrão básico de std que descreve as noções de ponteiro único e ponteiro partilhado. A heurística é simples, mas pode levar a surpresas: um tipo de ponteiro inteligente é qualquer tipo que defina operator-> ou operator*. Um tipo passível de cópia (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. Tenha em mente 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 de modelos (por exemplo, remoção explícita de indirecionamento de referência). Se o código do modelo for intencionalmente genérico, o aviso pode 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