【问题标题】: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 &" 你可能想改写一下。按引用不是按值。

标签: c++ c++11 smart-pointers unique-ptr


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-12-13
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多