【问题标题】:Dereferencing a copying the value of a unique_ptr取消引用复制 unique_ptr 的值
【发布时间】:2023-03-23 08:31:01
【问题描述】:

我有一个函数,它被赋予一个字符串的 unique_ptr。我想复制该值是 lambdas 并使用它来调用采用 std::string 的函数。我在下面做的事情是正确的方法吗:

void someFunc(std::unique_ptr<std::string> id) {
    const std::string idStr = *id;
    stream.subscribe([=](auto arg1) { arg1.invoke(idStr); });
}

我想要做的只是将字符串复制到一个新位置。那时不要关心 id unique_ptr 。我发现this discussion 说这似乎表明我可以执行以下操作:

std::string idStr = std::move(id);

但是,这实际上对我不起作用。它失败并出现“没有可行的转换”错误。

【问题讨论】:

  • std::string idStr = std::move(id); 在 if 为 std::unqiue_ptr 时无法工作。我想,你误解了这个问题。
  • std::string idStr = *id;
  • @SergeyA 我知道这对我不起作用。但是,您的评论对我来说没有意义。在链接的讨论中,它也是一个 unique_ptr。无论如何,我在这里要问的是我正在做的事情 (idStr = *id) 正在做我认为它所做的事情,并且是我前进的正确方式。
  • 我不明白这是什么问题。我不知道您所做的是正确还是错误,因为您没有告诉我们任何有关您的用例的信息。 stream 是什么,subscribe 是什么,invoke 是什么?
  • void someFunc(std::unique_ptr&lt;std::string&gt; id) 是一个奇怪的函数签名。由于unique_ptr 是按值传递的,这意味着调用站点正在放弃对它的所有权。如果你不关心它,你没有将它用于任何事情,那么为什么还要使用unique_ptr。您可以让 someFunc 按值获取一个字符串并将其移动到 lambda 中。

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


【解决方案1】:

我有一个函数,它被赋予了一个字符串的 unique_ptr。我想复制那个值

void someFunc(std::unique_ptr<std::string> id) {
    const std::string idStr = *id;

我想要做的只是将字符串复制到一个新位置。

这是复制指向字符串的正确方法,是的。

...我可以做到以下几点:

std::string idStr = std::move(id);

这是不正确的。你不能这样做。链接问题中的示例没有这样做。

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 2019-10-29
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    相关资源
    最近更新 更多