C++ 中指向 unique_ptr 函数参数的原始指针的目的是啥?
Posted
技术标签:
【中文标题】C++ 中指向 unique_ptr 函数参数的原始指针的目的是啥?【英文标题】:What is the purpose of a raw pointer to unique_ptr function parameter in C++?C++ 中指向 unique_ptr 函数参数的原始指针的目的是什么? 【发布时间】:2017-10-28 18:51:36 【问题描述】:浏览 TensorFlow C++ API,我偶然发现了一个奇怪的函数签名:
Status Create(
const FileSystemStoragePathSourceConfig & config,
std::unique_ptr< FileSystemStoragePathSource > *result
)
我不明白为什么result
是指向unique_ptr
的原始指针。因为通常当我们想要将unique_ptr
作为函数参数传递时,我们可以通过移动(&&
)或通过引用&
或通过值来实现。我以前没有见过指向unique_ptr
的原始指针的用例。
【问题讨论】:
疯狂猜测,因为编写它的人更喜欢将输出参数作为按地址而不是按引用来管理,这样调用语法很容易被误解。 另外,它允许输出参数是可选的。只有std::optional
之前的指针才能做到这一点。
"by value &" 你可能想改写一下。按引用不是按值。
【参考方案1】:
TensorFlow 由 Google 制作。 Google's C++ style guide 说:
所有通过引用传递的参数必须标记为
const
。
这意味着所有的输出参数必须是指针,而不是引用。这种风格不是惯用的 C++(标准库通过引用传递输出参数),但 Google 风格指南的支持者认为,将输出参数作为指针传递可以更清楚哪些参数是输入,哪些是输出。
【讨论】:
以上是关于C++ 中指向 unique_ptr 函数参数的原始指针的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章