【发布时间】:2016-09-27 09:57:17
【问题描述】:
我想明确一点,我的类A 的构造函数将获得传递的Data 参数的所有权。显而易见的做法是按值获取unique_ptr:
class A
{
public:
A(std::unique_ptr<Data> data) : _data(std::move(data)) { }
std::unique_ptr<Data> _data;
};
但是,对于我的用例,没有理由 Data 应该是指针,因为值类型就足够了。我能想到的唯一剩下的选项是通过右值引用传递:
class A
{
public:
A(Data&& data) : _data(std::move(data)) { }
Data _data;
};
这是表示所有权的有效方式,还是有更好的选择不使用unique_ptr?
【问题讨论】:
-
为什么 ctor 取得所有权?
-
我会明确构造函数
-
@IvanRubinson 出于多种原因,例如依赖注入。
-
好吧,你回答了你自己的问题,是的,移动 ctor 和 rvalues 通常是要走的路:)
-
Data可复制吗?
标签: c++ c++11 unique-ptr rvalue-reference