Каковы причины для передачи указателей на shared_ptr в функцию? - PullRequest
0 голосов
/ 21 января 2019

Я смотрел на C ++ API библиотеки Apache Arrow и заметил, что он полон функций-членов, которые принимают аргументы типа std::shared_ptr<T>*. Для меня это выглядит излишне надуманным и, возможно, хрупким, и мне откровенно странно, что библиотека будет предписывать, как я решу решение вопроса о владении экземплярами своих классов. Таким образом, я пришел к выводу, что у этого подхода должны быть некоторые преимущества, которых я не знаю, что вызвало мое любопытство.

Каковы преимущества функций, которые принимают указатели на интеллектуальные указатели в качестве аргументов?

Херб Саттер не упоминает эту опцию в своей статье Параметры интеллектуального указателя .

1 Ответ

0 голосов
/ 21 января 2019

std::shared_ptr<…>* используется в Arrow, когда функция возвращает объект как shared_ptr, в то время как функция может завершиться ошибкой с одним из кодов arrow::Status.

Apache Arrow C ++ соответствует руководству по стилю Google C ++.Одним из аспектов является не использовать исключения .Кроме того, обычно вывод будет производиться с помощью обычной инструкции return, но в тех случаях, когда нам также нужно возвращать Status, мы используем альтернативный подход , возвращая его через non-const указатель .

Для входов, в которых Arrow не владеет переданным параметром, вместо std::shared_ptr<T> функции принимают const T&.Совместно используемые указатели появляются в сигнатуре функции только в том случае, если впоследствии совместно используется владелец или если параметр равен , выходной параметр .

...