Имеется класс MyClass, разумеется с конструктором, нужно создать вектор умных указателей на объекты этого класса. Сам указатель создается, но при попытке добавления в вектор вылезает ошибка . Что я упустил?
#include <memory>
#include <vector>
using namespace std;
Int main()
{
vector<unique_ptr<MyClass>> vectorPtr;
unique_ptr<MyClass> p1(new MyClass);
// до этого момента всё в порядке
vectorPtr.push_back(p1);
return 0;
}
std::unique_ptr не имеет конструктора копирования, поэтому, чтобы поместить его в вектор, его нужно переместить туда:
vectorPtr.push_back(std::move(p1));
Или так:
vectorPtr.push_back(std::make_unique<MyClass>())
Либо же создавать прямо в векторе:
vectorPtr.emplace_back(new MyClass);
Сборка персонального компьютера от Artline: умный выбор для современных пользователей