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

时间:2016-09-27 09:57:18

标签: c++ c++11 unique-ptr rvalue-reference

我想明确表示我的班级A的构造函数将获取传递的Data参数的所有权。显而易见的事情是按值unique_ptr

class A
{
public:
    A(std::unique_ptr<Data> data) : _data(std::move(data)) { }

    std::unique_ptr<Data> _data;
};

但是,对于我的用例,没有理由将Data作为指针,因为值类型就足够了。我能想到的唯一剩下的选项是明确Data A将由class A { public: A(Data&& data) : _data(std::move(data)) { } Data _data; }; 拥有,是通过rvalue-reference传递的:

unique_ptr

这是一种有效的方式来表示所有权,还是有更好的方法可以在不使用function Person (firstName, lastName, age, numOscars) { this.firstName = firstName; this.lastName = lastName; this.age = age; this.numOscars = numOscars; hello : function greeting() { console.log ("Hello, my name is " + this.firstName); } } var actors = new Array (); actors[0] = new Person ("Leonardo", "DiCaprio", 41, 1); actors[1] = new Person ("Jennifer", "Lawrence", 25, 1); actors[2] = new Person ("Samuel L."," Jackson", 67, false); actors[3] = new Person ("Meryl", "Streep", 66, 3); actors[4] = new Person ("John", "Cho", 43, false); Person.hello(); 的情况下执行此操作?

2 个答案:

答案 0 :(得分:4)

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

unique_ptr的情况下,它是不可复制的,因此当他们不打算这样做时,不会有人意外地制作副本,因此传递价值和传递左值 - 参考意味着取得所有权。

Data的情况下,您正在获取所有权的rvalue-reference文件,并且在他们不打算时,调用者不会意外地制作副本。

答案 1 :(得分:2)

是的,这是一种有效的方法。您也可以按值传递它:

Employee