在C++中,指向unique_ptr函数参数的原始指针的用途是什么?

问题描述:

略读通过TensorFlow C++ API我偶然发现了一个奇怪的函数签名:在C++中,指向unique_ptr函数参数的原始指针的用途是什么?

Status Create(
    const FileSystemStoragePathSourceConfig & config, 
    std::unique_ptr<FileSystemStoragePathSource> *result 
) 

我不明白为什么result是一个原始指针unique_ptr。因为通常当我们想通过unique_ptr作为函数参数时,我们通过移动(&&)或参考&或通过值来完成。我还没有看到过使用原始指针unique_ptr的用例。

+0

疯狂的猜测,因为写它的人更喜欢管理out-parameters作为by-address而不是by-reference,其中调用语法很容易被误解。 – WhozCraig

+0

此外,它允许输出参数是可选的。某些人只能在'std :: optional'之前使用指针。 – StoryTeller

+0

“按价值&”您可能想要重述一下。由参考不是由价值。 – curiousguy

TensorFlow由Google制作。 Google's C++ style guide说:

通过引用传递的所有参数必须标记为const

这意味着所有的输出参数必须是指针而不是引用。这种风格不是惯用的C++(标准库通过引用传递输出参数),但Google风格指南的支持者认为,通过将输出参数作为指针传递,可以更清楚地了解哪些参数是输入的,哪些是输出。