CppCoreGuidelines R.21 最好用 unique_ptr,除非有共享所有权的需要,则用 shared_ptr
21 February 2023
“Prefer unique_ptr
over shared_ptr
unless you need to share ownership”
理由
unique_ptr
更简单,行为更可预测。因为你能知道什么时候会调用析构函数。速度也更快,不需要维护使用计数。
坏例子
这里其实不需要维护引用计数:
void f() { shared_ptr<Base> base = make_shared<Derived>(); // use base locally, without copying it -- refcount never exceeds 1 } // destroy base
例子
效率更高
void f() { unique_ptr<Base> base = make_unique<Derived>(); // use base locally } // destroy base
强化
警告:如果一个函数内用了共享指针,但是却不返回该指针,或以共享指针引用的方式传递给别的函数。建议使用 unique_ptr