Freigeben über


Warnung C26410

Der Parameter "parameter" ist ein Verweis auf einen eindeutigen Zeiger, verwenden const T* oder const T& stattdessen (r.32)

Im Allgemeinen sind Verweise auf den eindeutigen Zeiger bedeutungslos. Sie können sicher durch einen rohen Bezug oder einen Zeiger ersetzt werden. Diese Warnung erzwingt die C++-Kernrichtlinienregel R.32.

Hinweise

  • Eindeutige Zeigerprüfungen weisen eher allgemeine Kriterien auf, um intelligente Zeiger zu identifizieren. Die C++-Kernrichtlinienregel R.31: Wenn Sie nicht std-intelligente Zeiger haben, beschreiben Sie das grundlegende Muster von std die eindeutigen Zeiger- und freigegebenen Zeigerkonzepte. Die Heuristik ist einfach, kann aber zu Überraschungen führen: Ein intelligenter Zeigertyp ist jeder Typ, der entweder operator-> oder operator*. Ein kopierfähiger Typ (freigegebener Zeiger) muss entweder über einen öffentlichen Kopierkonstruktor oder einen überladenen Zuordnungsoperator verfügen, der sich mit einem Nicht-Rvalue-Verweisparameter befasst.

  • Vorlagencode kann zu lauten Warnungen führen. Beachten Sie, dass Vorlagen mit verschiedenen Typparametern mit unterschiedlichen Dereferenzierungsebenen, einschließlich Verweisen, instanziiert werden können. Einige Warnungen sind möglicherweise nicht offensichtlich und Korrekturen erfordern möglicherweise einige Überarbeitungen von Vorlagen (z. B. explizites Entfernen der Referenzreferenz). Wenn Vorlagencode absichtlich generisch ist, kann die Warnung unterdrückt werden.

Codeanalysename: NO_REF_TO_CONST_UNIQUE_PTR

Beispiel

Unnötiger Verweis:

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