Upozornění C26410
Parametr "parameter" je odkazem na const jedinečný ukazatel, použijte
const T*
neboconst T&
místo něj (r.32)
Obecně platí, že odkazy na const jedinečný ukazatel jsou bezvýznamné. Mohou být bezpečně nahrazeny nezpracovaným odkazem nebo ukazatelem. Toto upozornění vynucuje pravidlo C++ Core Guidelines R.32.
Poznámky
Kontroly jedinečných ukazatelů mají poměrně široká kritéria pro identifikaci inteligentních ukazatelů. Pravidlo C++ Core Guidelines R.31: Pokud máte neschůdné inteligentní ukazatele, postupujte podle základního vzoru ze seznamu std, popisuje jedinečný ukazatel a koncepty sdílených ukazatelů. Heuristika je jednoduchá, ale může vést k překvapením: typ inteligentního ukazatele je libovolný typ, který definuje buď
operator->
nebooperator*
. Typ umožňující kopírování (sdílený ukazatel) musí mít buď veřejný konstruktor kopírování, nebo přetížený operátor přiřazení, který se zabývá nehodnotovým referenčním parametrem.Kód šablony může vyvolat hlučná upozornění. Mějte na paměti, že šablony je možné vytvořit instanci s různými parametry typu s různými úrovněmi nepřímých odkazů, včetně odkazů. Některá upozornění nemusí být jasná a opravy můžou vyžadovat určité přepracování šablon (například explicitní odebrání nepřímých odkazů). Pokud je kód šablony záměrně obecný, můžete upozornění potlačit.
Název analýzy kódu: NO_REF_TO_CONST_UNIQUE_PTR
Příklad
Nepotřebné odkazy:
std::vector<std::unique_ptr<Tree>> roots = GetRoots();
std::for_each(
roots.begin(),
roots.end(),
[](const auto &root) { Rebalance(root.get()); }); // C26410