警告 C26418
共用指標參數不會複製或移動。 請改用 T* 或 T& 。
C++ 核心指導方針: R.36:採用 const shared_ptr<widget>& 參數來表示它可能會保留物件的參考計數
如果共用指標參數是以傳值方式傳遞,或藉由參考常數物件,則函式預期會控制目標物件的存留期,而不會影響呼叫端。 程式代碼應該複製或移動共用指標參數至另一個共用指針對象,或叫用接受共用指標的函式,將它一起傳遞至其他程序代碼。 否則,一般指標或參考可能可行。
備註
這項檢查可
std::shared_pointer
辨識和使用者定義類型,這些類型的行為可能會像共用指標一樣。 使用者定義共享指標預期會有下列特性:多載取值或成員存取運算元(公用和非刪除):
複製建構函式或複製指派運算元(公用和非刪除):
未刪除或預設的公用解構函式。 空解構函式仍會算作用戶定義。
範例
不必要的介面複雜功能
template<class T>
std::string to_string(const std::shared_ptr<T> &e) // C26418, also C26415 SMART_PTR_NOT_NEEDED
{
return !e ? null_string : e->to_string();
}
不必要的介面複雜功能 - 簡化
template<class T>
std::string to_string(const T *e)
{
return !e ? null_string : e->to_string();
}