C26410 NO_REF_TO_CONST_UNIQUE_PTRC26410 NO_REF_TO_CONST_UNIQUE_PTR

En règle générale, les références à un pointeur unique const sont sans effet.Generally, references to const unique pointer are meaningless. Ils peuvent en toute sécurité remplacées par une référence brute ou un pointeur.They can safely be replaced by a raw reference or a pointer.

NotesRemarks

  • Pointeur unique vérifications ont des critères assez large pour identifier les pointeurs intelligents.Unique pointer checks have rather broad criteria to identify smart pointers. La règle R.31 : si vous avez non-std actives des pointeurs, procédez comme le modèle de base à partir de std décrit le pointeur unique et partagé des concepts de pointeur.The rule R.31: If you have non-std smart pointers, follow the basic pattern from std describes the unique pointer and shared pointer concepts. L’heuristique est simple, mais peut entraîner les surprises : un type de pointeur intelligent est n’importe quel type qui définit l’opérateur -> ou opérateur*; un type en mesure de copie (pointeur partagé) doit avoir le constructeur de copie public ou de l’opérateur d’assignation surchargés qui porte sur un paramètre de référence de R-valeur.The heuristic is simple, but may lead to surprises: a smart pointer type is any type which defines either operator-> or operator*; a copy-able type (shared pointer) must have either public copy constructor or overloaded assignment operator which deals with a non-R-value reference parameter.
  • Code du modèle peut produire un grand nombre de mots parasites.Template code may produce a lot of noise. Gardez à l’esprit 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.Keep in mind that templates can be instantiated with various type parameters with different levels of indirection, including references. Les avertissements ne peuvent pas être évidentes et correctifs peuvent nécessiter certaines modifications des modèles (par exemple, la suppression explicite d’indirection de référence).Some warnings may not be obvious and fixes may require some rework of templates (for example, explicit removal of reference indirection). Si le code du modèle est intentionnellement générique, l’avertissement peut être supprimé.If template code is intentionally generic, the warning can be suppressed.

Exemple 1 : Les référence inutileExample 1: Unnecessary reference

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