将unique_ptr作为引用参数或常量传递unique_ptr引用



我有一些在std::vector<std::unique_ptr<MyObject>>中维护的对象池,我将对象从这个池传递给函数void process(...)。我不清楚将这些对象之一传递给process()函数的最佳方法。如果我理解我读过的不同答案和文章,最好将其作为常规参考,如下所示:void process(MyObject& buffer);

据我了解,这是可取的,因为:

  1. 我传入的缓冲区应该保证在process()方法的整个生命周期中保持存在,因为它是由unique_ptr的所有者调用
  2. 的,即调用方法
  3. 调用方也可以传递堆栈分配的对象,因此不会对此方法的客户端施加分配限制
  4. 如果 ptrs 可以是 nullptr,那么建议将原始指针传递给process()方法

这种理解是否正确,或者什么是最好的指导?以下是我读过的参考资料: 将常量unique_ptr引用作为参数传递

https://www.chromium.org/developers/smart-pointer-guidelines

https://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/

是的,出于您给出的原因,这是一种明智的方法。

最新更新