28 February 2023

C++ 核心指南目录

“Take a uniqueptr<widget>& parameter to express that a function reseats the widget”

理由

通过这种方式使用 unique_ptr 说明并强化函数调用的重座语义。

注意

重座(Reseat)意思是让一个指针或智能指针指向一个不同的对象。

例子

void reseat(unique_ptr<widget>&); // "will" or "might" reseat pointer

坏例子

void thinko(const unique_ptr<widget>&); // usually not what you want

强化

  • 警告:如果一个函数接收 unique_ptr<T> 的左值引用参数,但是在所有代码执行路径上既不赋值,也不调用 reset() 。考虑使用 T*T&
  • 警告:一个函数接收 unique_ptr<T> 常值引用,考虑使用 const T*const T&