如何使用不可复制和不可移动的对象创建矢量?

时间:2017-10-10 18:43:39

标签: c++ c++11 unique-ptr noncopyable

我有一个班级

class A {
 public:
  A(int x): x_(x) {}
  void SetValue(int m) {x_=m};
 private:
   DISALLOW_COPY_AND_ASSIGN(A);
};

我试图创建一个A类型的对象向量

vector<std::unique_ptr<A>> objects;
objects.reserve(10);
for (int i = 0; i < 10; i++) {
   auto a = MakeUnique<A>();
   a->SetValue(20);
   objects.emplace_back(a);
}

这会导致对已删除的'std::unique_ptr<A, std::default_delete<A> >'

构造函数进行编译错误调用

1 个答案:

答案 0 :(得分:7)

std::unique_ptr不可复制,因此您需要将其移动到容器中:

for (int i = 0; i < 10; i++) {
   auto a = MakeUnique<A>();
   a->SetValue(20);
   objects.emplace_back(std::move(a));
}