传递unique_ptr作为参考参数或const unique_ptr参考

时间:2019-08-22 17:34:46

标签: c++ c++11 smart-pointers

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

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

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

这是正确的理解还是正确的指导?这是我已阅读的参考资料: Passing const unique_ptr reference as parameter

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

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

1 个答案:

答案 0 :(得分:3)

是的,出于您的原因,这是明智的选择。