我有以下方法:
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/