Megosztás:


Figyelmeztetés C26410

A "paraméter" paraméter az egyedi mutató konstansára, használatára const T* vagy const T& helyette (r.32) való hivatkozás.

A const egyedi mutatóra mutató hivatkozások általában értelmetlenek. Biztonságosan helyettesíthetők nyers hivatkozással vagy mutatóval. Ez a figyelmeztetés az R.32 C++ alapvető irányelvszabályt kényszeríti ki.

Megjegyzések

  • Az egyedi mutató-ellenőrzések meglehetősen széles feltételeknek megfelelnek az intelligens mutatók azonosításához. A C++ alapvető irányelvek R.31 szabálya: Ha nem std intelligens mutatókkal rendelkezik, kövesse az std alapmintáját, amely az egyedi mutatót és a megosztott mutató fogalmait ismerteti. A heurisztikus egyszerű, de meglepetésekhez vezethet: az intelligens mutatótípus bármilyen típus, amely meghatározza vagy operator->operator*. A másolásra képes típusnak (megosztott mutatónak) nyilvános másolási konstruktorral vagy túlterhelt hozzárendelési operátorral kell rendelkeznie, amely nem Rvalue referenciaparaméterrel foglalkozik.

  • A sablonkód zajos figyelmeztetéseket okozhat. Ne feledje, hogy a sablonok különböző típusú paraméterekkel hozhatók létre különböző indirektségi szintekkel, beleértve a hivatkozásokat is. Előfordulhat, hogy egyes figyelmeztetések nem egyértelműek, és a javítások szükségessé tehetik a sablonok újradolgozását (például a hivatkozás közvetett eltávolítását). Ha a sablonkód szándékosan általános, a figyelmeztetés mellőzhető.

Kódelemzés neve: NO_REF_TO_CONST_UNIQUE_PTR.

példa

Szükségtelen hivatkozás:

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