Condividi tramite


Avviso C26410

Il parametro 'parameter' è un riferimento al puntatore univoco const, usare const T* o const 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-> o operator*. 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