3

我正在查看 Apache 的 Arrow 库的 C++ API,并注意到它到处都是接受 type 参数的成员函数std::shared_ptr<T>*。对我来说,这看起来是不必要的做作,而且可能很脆弱,坦率地说,一个库会规定我如何选择解决我的类实例的所有权,这对我来说很奇怪。因此我的结论是,这种方法一定有一些我不知道的优点,这激发了我的好奇心。

将指向智能指针的指针作为参数的函数有哪些优点?

Herb Sutter 在他关于智能指针参数的文章中没有提到这个选项。

4

1 回答 1

4

std::shared_ptr<…&gt;*当函数在一段时间内返回一个对象时,在 Arrow 中使用shared_ptr该函数可能会因arrow::Status代码之一而失败。

Apache Arrow C++ 遵循 Google C++ 风格指南。其中一个方面是不使用异常。此外,通常输出将使用普通return语句完成,但在我们还需要返回 a 的情况下,我们使用通过指针返回它Status的替代方法。non-const

对于 Arrow 对传递的参数没有所有权的输入,而不是std::shared_ptr<T>,函数采用const T&。共享指针仅在所有权之后共享或参数是输出参数时才会出现在函数签名中。

于 2019-01-21T17:55:45.930 回答