传递 unique_ptr 作为参考参数或 const unique_ptr 参考
Passing unique_ptr as reference parameter or const unique_ptr reference
我在 std::vector<std::unique_ptr<MyObject>>
中维护了一些对象池,并将该池中的对象传递给函数 void process(...)
。我不清楚将这些对象之一传递给 process()
函数的最佳方法。如果我理解我读过的不同答案和文章,最好将其作为常规参考传递,如下所示:
void process(MyObject& buffer);
根据我的理解,这是更可取的,因为:
- 我传入的缓冲区应该保证在
process()
方法的整个生命周期中都存在,因为它是由 unique_ptr 的所有者调用的,即调用方式
- 调用者也可以传递堆栈分配的对象,因此这不会对该方法的客户端施加分配限制
- 如果 ptrs 可以是 nullptr,那么建议将原始指针传递给
process()
方法
这种理解是否正确或最好的指导是什么?以下是我读过的参考资料:
https://www.chromium.org/developers/smart-pointer-guidelines
https://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/
是的,根据您给出的原因,这是一个明智的做法。
我在 std::vector<std::unique_ptr<MyObject>>
中维护了一些对象池,并将该池中的对象传递给函数 void process(...)
。我不清楚将这些对象之一传递给 process()
函数的最佳方法。如果我理解我读过的不同答案和文章,最好将其作为常规参考传递,如下所示:
void process(MyObject& buffer);
根据我的理解,这是更可取的,因为:
- 我传入的缓冲区应该保证在
process()
方法的整个生命周期中都存在,因为它是由 unique_ptr 的所有者调用的,即调用方式 - 调用者也可以传递堆栈分配的对象,因此这不会对该方法的客户端施加分配限制
- 如果 ptrs 可以是 nullptr,那么建议将原始指针传递给
process()
方法
这种理解是否正确或最好的指导是什么?以下是我读过的参考资料:
https://www.chromium.org/developers/smart-pointer-guidelines
https://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/
是的,根据您给出的原因,这是一个明智的做法。