警告 C26416
共用指標參數會由右值參考傳遞。 請改用值傳遞。
C++核心指導方針: R.34:取得shared_ptr<小工具> 參數來表示函式是部分擁有者
很少需要透過右值參考傳遞共享指標。 除非它是共用指標類型本身移動語意的實作,否則共用指針對象可以透過值安全地傳遞。 使用右值參考也可能表示唯一指標更合適,因為它清楚地將唯一擁有權從呼叫端轉移給被呼叫者。
備註
這項檢查可
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))
{}