Udostępnij za pośrednictwem


Ostrzeżenie C26410

Parametr "parameter" jest odwołaniem do const unikatowego wskaźnika, użyj const T* lub const T& zamiast niego (r.32)

Ogólnie rzecz biorąc, odwołania do const unikatowy wskaźnik są bez znaczenia. Można je bezpiecznie zastąpić nieprzetworzonym odwołaniem lub wskaźnikiem. To ostrzeżenie wymusza regułę podstawowych wytycznych języka C++ R.32.

Uwagi

  • Unikatowe kontrole wskaźników mają dość szerokie kryteria identyfikowania inteligentnych wskaźników. Podstawowa reguła wytycznych języka C++ R.31: jeśli masz inteligentne wskaźniki inne niż std, postępuj zgodnie ze wzorcem podstawowym ze std opisuje unikatowe koncepcje wskaźnika i wskaźnika współużytkowanego. Heurystyka jest prosta, ale może prowadzić do niespodzianek: inteligentny typ wskaźnika to dowolny typ, który definiuje wartość operator-> lub operator*. Typ z obsługą kopiowania (wskaźnik współużytkowany) musi mieć konstruktor kopii publicznej lub przeciążony operator przypisania, który zajmuje się parametrem referencyjnym innym niż Rvalue.

  • Kod szablonu może generować hałaśliwe ostrzeżenia. Pamiętaj, że szablony mogą być tworzone przy użyciu różnych parametrów typu z różnymi poziomami pośrednimi, w tym odwołaniami. Niektóre ostrzeżenia mogą nie być oczywiste, a poprawki mogą wymagać pewnych przeróbek szablonów (na przykład jawnego usunięcia odwołania pośredniego). Jeśli kod szablonu jest celowo ogólny, ostrzeżenie można pominąć.

Nazwa analizy kodu: NO_REF_TO_CONST_UNIQUE_PTR

Przykład

Niepotrzebne odwołanie:

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