警告 C26416
共享指针参数通过 rvalue 引用传递。 请改为通过值传递。
C++ Core Guidelines:R.34:采用 shared_ptr<widget> 参数来表示函数是部件所有者
很少需要通过 rvalue 引用传递共享指针。 除非是共享指针类型本身移动语义的实现,否则可以安全通过值传递共享指针对象。 使用 rvalue 引用也可能指示唯一指针更合适,因为它清楚地将唯一所有权从调用方转移到被调用方。
注解
此检查可识别
std::shared_pointer
和用户定义类型,这些类型的行为可能类似于共享指针。 用户定义共享指针应具有以下特征:重载取消引用或成员访问运算符(公共且未删除);
复制构造函数或复制赋值运算符(公共且未删除);
未删除或非默认的公共析构函数。 空析构函数仍算作用户定义。
示例
可疑构造函数优化:
action::action(std::shared_ptr<transaction> &&t) noexcept // C26416
: transaction_(std::move(t))
{}
action::action(std::shared_ptr<transaction> &t) noexcept // also C26417 LVALUE_REF_SHARED_PTR
: transaction_(t)
{}
可疑构造函数优化 - 简化:
action::action(std::shared_ptr<transaction> t) noexcept
: transaction_(std::move(t))
{}