Avviso C26410
Il parametro 'parameter' è un riferimento al puntatore univoco const, usare
const T*
oconst T&
(r.32)
In genere, i riferimenti al puntatore univoco const sono senza significato. Possono essere sostituiti in modo sicuro da un riferimento non elaborato o da un puntatore. Questo avviso applica la regola delle linee guida di base di C++R.32.
Osservazioni:
I controlli dei puntatori univoci hanno criteri piuttosto ampi per identificare i puntatori intelligenti. La regola delle linee guida di base di C++R.31: se si dispone di puntatori intelligenti non std, seguire il modello di base di std descrive i concetti univoci del puntatore e del puntatore condiviso. L'euristica è semplice, ma può causare sorprese: un tipo di puntatore intelligente è qualsiasi tipo che definisce
operator->
ooperator*
. Un tipo copia-able (puntatore condiviso) deve avere un costruttore di copia pubblica o un operatore di assegnazione di overload che gestisce un parametro di riferimento non Rvalue.Il codice del modello può generare avvisi rumorosi. Tenere presente che è possibile creare un'istanza dei modelli con vari parametri di tipo con diversi livelli di riferimento indiretto, inclusi i riferimenti. Alcuni avvisi potrebbero non essere evidenti e le correzioni potrebbero richiedere alcune rielaborazioni dei modelli (ad esempio, la rimozione esplicita dell'riferimento indiretto). Se il codice del modello è intenzionalmente generico, l'avviso può essere eliminato.
Nome dell'analisi del codice: NO_REF_TO_CONST_UNIQUE_PTR
Esempio
Informazioni di riferimento non necessarie:
std::vector<std::unique_ptr<Tree>> roots = GetRoots();
std::for_each(
roots.begin(),
roots.end(),
[](const auto &root) { Rebalance(root.get()); }); // C26410