我想明确表示我的班级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();
的情况下执行此操作?
答案 0 :(得分:4)
是的,我认为这是一种有效的方式。
在unique_ptr
的情况下,它是不可复制的,因此当他们不打算这样做时,不会有人意外地制作副本,因此传递价值和传递左值 - 参考意味着取得所有权。
在Data
的情况下,您正在获取所有权的rvalue-reference文件,并且在他们不打算时,调用者不会意外地制作副本。
答案 1 :(得分:2)
是的,这是一种有效的方法。您也可以按值传递它:
Employee