Как создать вектор с не копируемыми и неподвижными объектами?
У меня есть класс
class A {
public:
A(int x): x_(x) {}
void SetValue(int m) {x_=m};
private:
DISALLOW_COPY_AND_ASSIGN(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 ответ
Решение
std::unique_ptr
не копируется, поэтому вам нужно переместить его в контейнер:
for (int i = 0; i < 10; i++) {
auto a = MakeUnique<A>();
a->SetValue(20);
objects.emplace_back(std::move(a));
}