Avertissement C26410

Le paramètre 'parameter' est une référence au pointeur unique const, utiliser const T* ou const T& à la place (r.32)

En règle générale, les références au pointeur unique const sont sans signification. Ils peuvent être remplacés en toute sécurité par une référence brute ou un pointeur. Cet avertissement applique la règle des instructions de base C++ R.32.

Notes

  • Les case activée de pointeur unique ont des critères plutôt larges pour identifier les pointeurs intelligents. La règle C++ Core Guidelines R.31 : si vous avez des pointeurs intelligents non std, suivez le modèle de base de std décrit les concepts de pointeur unique et de pointeur partagé. L’heuristique est simple, mais peut entraîner des surprises : un type de pointeur intelligent est n’importe quel type qui définit ou operator->operator*. Un type de copie (pointeur partagé) doit avoir un constructeur de copie public ou un opérateur d’affectation surchargé qui traite d’un paramètre de référence non Rvalue.

  • Le code du modèle peut produire des avertissements bruyants. N’oubliez pas que les modèles peuvent être instanciés avec différents paramètres de type avec différents niveaux d’indirection, y compris les références. Certains avertissements peuvent ne pas être évidents et les correctifs peuvent nécessiter une remaniement de modèles (par exemple, suppression explicite de l’indirection de référence). Si le code du modèle est intentionnellement générique, l’avertissement peut être supprimé.

Nom de l’analyse du code : NO_REF_TO_CONST_UNIQUE_PTR

Exemple

Référence inutile :

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