我想说明的是,我的类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所有的选择是通过rvalue-reference传递:
class A
{
public:
A(Data&& data) : _data(std::move(data)) { }
Data _data;
};这是发出所有权信号的有效方式吗?或者有没有更好的方法来在不使用unique_ptr的情况下这样做
发布于 2016-09-27 18:19:09
是的,我认为这是一种有效的方式。
在unique_ptr的情况下,它是不可复制的,所以没有人意外复制的危险,因为他们不打算这样做,所以通过值传递和通过右值引用传递都意味着获得所有权。
在使用Data的情况下,通过右值传递引用您正在获取所有权的文档,并且不会有调用者无意中复制文档的危险。
发布于 2016-09-27 18:03:54
是的,这是一种有效的方式。也可以通过值传递:
class A {
A(Data data) : _data(std::move(data)) { }
};
Data data;
A a(std::move(data));https://stackoverflow.com/questions/39721654
复制相似问题