【问题标题】:Is it a bad usage to reference a unique_ptr? [duplicate]引用 unique_ptr 是不好的用法吗? [复制]
【发布时间】:2013-03-11 03:45:32
【问题描述】:

将 unique_ptr 的引用传递给函数是一种不好的用法吗?

void Foo(std::unique_ptr<T>& rT)
{
   ...
}

【问题讨论】:

  • 完全没有上下文?是的,这很糟糕。唯一指针应该只暴露给那些关心托管对象所有权的人,这在像你这样的代码中很少发生。
  • 最好详细解释您实际在做什么,并询问您是否使用了一种好的方法。
  • 有什么选择?
  • 您在这里的确切目的是什么?如果您试图让Foo 访问您的unique_ptr 指向的内容,请接受const T&amp; 或在极少数情况下接受T&amp;(可能用于类似交换功能)。如果Foo 应该获得所有权,请按值接受unique_ptr。然后Foo 的调用者可以将move 他的unique_ptr 转为Foo

标签: c++


【解决方案1】:

void Foo(std::unique_ptr&lt;T&gt;&amp; rT) 意味着两件事:

你不能像这样调用函数:Foo(std::unique_ptr&lt;T&gt;(new T));,因为它是一个非常量左值引用。这限制了你的函数只接受左值。

如果你传递一个左值,你不知道它会发生什么:Foo(myunique_ptr);。在这样的通话中,您不知道Foo 是否声称拥有std::unique_ptr。如果调用者不知道 Foo 内部发生了什么并且从函数签名中肯定不清楚,这可能会很危险。

现在综合以上几点,就可以判断是不是不好用了。

【讨论】:

  • +1 表示最后一句话。我必须记住这一点。好一个
猜你喜欢
  • 2013-08-06
  • 2012-08-06
  • 2023-03-23
  • 1970-01-01
  • 2014-07-27
  • 2012-07-27
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多