Sdílet prostřednictvím


Upozornění C26410

Parametr "parameter" je odkazem na const jedinečný ukazatel, použijte const T* nebo const 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-> nebo operator*. 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