27 February 2023

C++ 核心指南目录

“Take a unique_ptr<widget> parameter to express that a function assumes ownership of a widget”

理由

使用 unique_ptr 说明并强化函数调用接收所有权转移。

例子

void sink(unique_ptr<widget>); // takes ownership of the widget

void uses(widget*);            // just uses the widget

坏例子

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

强化

  • 警告:如果一个函数接收左值引用的 unique_ptr<T> 参数,却在任何代码路径中不给它赋值,或调用 reset() 。考虑使用 T* 或 T&
  • 警告:如果一个函数接收 unique_ptr<T> 的常值引用,考虑使用 const T*const T&