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 作为函数参数传递时,我们可以通过移动(&amp;&amp;)或通过引用&amp; 或通过值来实现。我以前没有见过指向unique_ptr 的原始指针的用例。

【问题讨论】:

疯狂猜测,因为编写它的人更喜欢将输出参数作为按地址而不是按引用来管理,这样调用语法很容易被误解。 另外,它允许输出参数是可选的。只有std::optional之前的指针才能做到这一点。 "by value &" 你可能想改写一下。按引用不是按值。 【参考方案1】:

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

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

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

【讨论】:

以上是关于C++ 中指向 unique_ptr 函数参数的原始指针的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

C++ unique_ptr介绍及仿写

C++简单实现unique_ptr

指向重载静态成员的函数指针 - 在 unique_ptr 中用作自定义删除器

c++ unique_ptr 参数传递

C++ 函数返回引用

在 C++ 中使用指针和指向指针参数的指针创建构造函数