首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回unique_ptr,它是函数参数

返回unique_ptr,它是函数参数
EN

Stack Overflow用户
提问于 2017-06-08 01:39:00
回答 1查看 1.2K关注 0票数 1

我有以下方法:

代码语言:javascript
运行
复制
std::unique_ptr<Req> RequestConverter::SetReg(
    const std::unique_ptr<Req> pb_req, ...) {

我想从上面的方法返回参数pb_req。我得到这个错误(使用或不使用std::move):

代码语言:javascript
运行
复制
error: call to deleted constructor of 'std::unique_ptr<Req>'

推荐的方法是什么?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-06-08 01:44:36

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

代码语言:javascript
运行
复制
unique_ptr(const unique_ptr&) = delete;

当您从函数返回const unique_ptr<Req>时,返回值将被视为右值,因此构造函数的精确匹配项(如果可用)为

代码语言:javascript
运行
复制
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>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44419379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档