警告 C26410

参数“parameter”是对常量唯一指针的引用,请改用 const T*const T& (r.32)

通常,对 const 唯一指针的引用毫无意义。 可以安全地将其替换为原始引用或指针。 此警告强制实施 C++ Core Guidelines 规则 R.32

备注

  • 唯一指针检查用以标识智能指针的条件相当宽泛。 C++ Core Guidelines 规则 R.31如果你有非 std 智能指针,请按照 std 中的基本模式描述唯一指针和共享指针概念。 启发式操作很简单,但可能会导致意外:智能指针类型是定义 operator->operator* 的任何类型。 可复制类型(共享指针)必须具有公共复制构造函数或处理非 Rvalue 引用参数的重载赋值运算符。

  • 模板代码可能会生成干扰性警告。 请记住,可以使用具有不同间接级别的各类参数(包括引用)来实例化模板。 某些警告可能并不明显,修复可能需要对模板进行一些重新处理(例如,显式删除间接引用)。 如果模板代码可以故意通用,则可以禁止显示警告。

代码分析名称:NO_REF_TO_CONST_UNIQUE_PTR

示例

不必要的引用:

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