c++ - 返回函数参数 unique_ptr

标签 c++ return unique-ptr

我有以下方法:

std::unique_ptr<Req> RequestConverter::SetReg(
    const std::unique_ptr<Req> pb_req, ...) {

我想从上面的方法返回参数 pb_req。 我收到此错误(有或没有 std::move):

error: call to deleted constructor of 'std::unique_ptr<Req>'

推荐的方法是什么?

谢谢

最佳答案

unique_ptr复制构造函数被标记为已删除,即如下

unique_ptr(const unique_ptr&) = delete;

当你返回一个 const unique_ptr<Req>从你的函数中,返回值被视为右值,因此如果可用的话,构造函数的精确匹配将是

unique_ptr(const unique_ptr&&);

移动构造函数不匹配const unique_ptr<Req>&&因为它需要一个非 const右值引用。所以最接近的匹配是被删除的复制构造函数,因此这是行不通的。

但是您应该问自己的问题是,为什么要标记 unique_ptr首先是常量? const unique_ptr意味着指针是常量,而不是指向的东西。如果你想要 unique_ptr const,你应该做unique_ptr<const Req>反而。

关于c++ - 返回函数参数 unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44419379/

相关文章:

c++ - .NET:如何以编程方式确定 .NET 应用程序是否已编译?

C++ 递归模板特化

c++ - 以整数为参数,返回数组

c++ - 创建包含已分配数组的 unique_ptr 的正确方法

c++ - 为什么在此示例中从 unique_ptr<derived> 自动向上转换到 unique_ptr<base> 失败?

c++ - 如何检测 OSX 上的 <filesystem> 可用性?

c++ - 有人可以举例说明递归如何与 while 循环一起使用吗?我无法理解流程

接收字符串的 Python 函数,返回字符串 + "!"

java - 如何通过 asyncTask 方法解析来自 2 个不同 URL 的数据

c++ - unique_ptr::get() 而不是 &* 有什么用?