CppCoreGuidelines R.34 用 shared_ptr 参数表示共享所有权
01 March 2023
“Take a shared_ptr<widget> parameter to express shared ownership”
理由
显式的表明函数的共享所有权
好例子
class WidgetUser { public: // WidgetUser will share ownership of the widget explicit WidgetUser(std::shared_ptr<widget> w) noexcept: m_widget{std::move(w)} {} // ... private: std::shared_ptr<widget> m_widget; };
强化
- 警告:如果一个函数接收
shared_ptr<T>
的左值引用参数,但是在所有代码执行路径上既不赋值,也不调用reset()
。考虑使用T*
或T&
- 警告:如果一个函数接收
unique_ptr<T>
值或常值引用,但是在所有代码路径上,不复制或移动到另一个共享指针,考虑使用T*
或T&
- 警告:如果一个函数接收
shared_ptr<T>
右值引用,考虑使用值传递。