【发布时间】: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<std::string> id)是一个奇怪的函数签名。由于unique_ptr是按值传递的,这意味着调用站点正在放弃对它的所有权。如果你不关心它,你没有将它用于任何事情,那么为什么还要使用unique_ptr。您可以让someFunc按值获取一个字符串并将其移动到 lambda 中。
标签: c++ smart-pointers unique-ptr