共用方式為


警告 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();
}