将指向 shared_ptr 的指针传递给函数的原因是什么?
What are the reasons for passing a pointers to a shared_ptr to a function?
我正在查看 Apache 的 Arrow 库的 C++ API,并注意到它到处都是采用 std::shared_ptr<T>*
类型参数的成员函数。对我来说,这看起来是不必要的做作而且可能很脆弱,坦率地说,图书馆会规定我如何选择解决其 类 实例的所有权,这对我来说很奇怪。因此我的结论是,这种方法一定有一些我不知道的优点,这激发了我的好奇心。
以智能指针为参数的函数有什么优点?
Herb Sutter 在他关于 Smart Pointer Parameters 的文章中没有提到这个选项。
std::shared_ptr<…>*
在 Arrow 中使用,当函数将对象作为 shared_ptr
返回时,同时该函数可能会因 arrow::Status
代码之一而失败。
Apache Arrow C++ 遵循 Google C++ 风格指南。其中一个方面是 not use exceptions. Furthermore, normally output will be done with a normal return
statement but in the cases where we also need to return a Status
, we use the alternative approach of returning it via a non-const
pointer.
对于 Arrow 不拥有传递参数所有权的输入,而不是 std::shared_ptr<T>
,函数采用 const T&
。如果之后共享所有权或参数是输出参数。
,则共享指针仅出现在函数签名中
我正在查看 Apache 的 Arrow 库的 C++ API,并注意到它到处都是采用 std::shared_ptr<T>*
类型参数的成员函数。对我来说,这看起来是不必要的做作而且可能很脆弱,坦率地说,图书馆会规定我如何选择解决其 类 实例的所有权,这对我来说很奇怪。因此我的结论是,这种方法一定有一些我不知道的优点,这激发了我的好奇心。
以智能指针为参数的函数有什么优点?
Herb Sutter 在他关于 Smart Pointer Parameters 的文章中没有提到这个选项。
std::shared_ptr<…>*
在 Arrow 中使用,当函数将对象作为 shared_ptr
返回时,同时该函数可能会因 arrow::Status
代码之一而失败。
Apache Arrow C++ 遵循 Google C++ 风格指南。其中一个方面是 not use exceptions. Furthermore, normally output will be done with a normal return
statement but in the cases where we also need to return a Status
, we use the alternative approach of returning it via a non-const
pointer.
对于 Arrow 不拥有传递参数所有权的输入,而不是 std::shared_ptr<T>
,函数采用 const T&
。如果之后共享所有权或参数是输出参数。