CppCoreGuidelines R.35 使用 shared_ptr& 参数表示函数会重座共享指针
02 March 2023
“Take a shared_ptr<widget>&
parameter to express that a function might reseat the shared pointer”
理由
明确标明函数的重座机制。
注意
重座(reseat)指的是让引用或智能指针指向另一个不同的对象
坏例子
void ChangeWidget(std::shared_ptr<widget>& w) { // This will change the callers widget w = std::make_shared<widget>(widget{}); }
强化
- 警告:如果一个函数接收
shared_ptr<T>
的左值引用参数,但是在所有代码执行路径上既不赋值,也不调用reset()
。考虑使用T*
或T&
- 警告:如果一个函数接收
unique_ptr<T>
值或常值引用,但是在所有代码路径上,不复制或移动到另一个共享指针,考虑使用T*
或T&
- 警告:如果一个函数接收
shared_ptr<T>
右值引用,考虑使用值传递。