我有以下方法:
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>'推荐的方法是什么?
谢谢
发布于 2017-06-08 01:44:36
unique_ptr复制构造函数被标记为已删除,即
unique_ptr(const unique_ptr&) = delete;当您从函数返回const unique_ptr<Req>时,返回值将被视为右值,因此构造函数的精确匹配项(如果可用)为
unique_ptr(const unique_ptr&&);move构造函数不匹配const unique_ptr<Req>&&,因为它需要非const右值引用。因此,最接近的匹配是被删除的复制构造函数,因此这是不起作用的。
但您应该问自己的问题是,为什么首先要将unique_ptr标记为const?const unique_ptr表示指针是const,而不是指向的对象。如果你想要一个const的unique_ptr,你应该改为使用unique_ptr<const Req>。
https://stackoverflow.com/questions/44419379
复制相似问题