首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过rvalue-reference获取参数的所有权

通过rvalue-reference获取参数的所有权
EN

Stack Overflow用户
提问于 2016-09-27 17:57:18
回答 2查看 1.5K关注 0票数 13

我想说明的是,我的类A的构造函数将获得传递的Data参数的所有权。最明显的做法是按值获取unique_ptr

代码语言:javascript
复制
class A
{
public:
    A(std::unique_ptr<Data> data) : _data(std::move(data)) { }

    std::unique_ptr<Data> _data;
};

然而,就我的用例而言,没有理由让Data成为指针,因为值类型就足够了。我能想到的唯一一个明确表明Data将归A所有的选择是通过rvalue-reference传递:

代码语言:javascript
复制
class A
{
public:
    A(Data&& data) : _data(std::move(data)) { }

    Data _data;
};

这是发出所有权信号的有效方式吗?或者有没有更好的方法来在不使用unique_ptr的情况下这样做

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-27 18:19:09

是的,我认为这是一种有效的方式。

unique_ptr的情况下,它是不可复制的,所以没有人意外复制的危险,因为他们不打算这样做,所以通过值传递和通过右值引用传递都意味着获得所有权。

在使用Data的情况下,通过右值传递引用您正在获取所有权的文档,并且不会有调用者无意中复制文档的危险。

票数 4
EN

Stack Overflow用户

发布于 2016-09-27 18:03:54

是的,这是一种有效的方式。也可以通过值传递:

代码语言:javascript
复制
class A {
    A(Data data) : _data(std::move(data)) { }
};
Data data;
A a(std::move(data));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39721654

复制
相关文章

相似问题

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