Код здесь жалуется, что строка с push_back пытается создать объект типа Abstract.
#include <vector>
#include <memory>
class Abstract
{
public:
Abstract() {}
virtual void f() = 0;
};
class Derived : public Abstract
{
public:
Derived() {}
void f() override { }
};
int main (int argc, char** argv)
{
std::vector<std::unique_ptr<Abstract>> vec;
vec.push_back (std::make_unique<Abstract>(new Derived));
return 0;
}
Вот сообщения об ошибках:
error C2259: 'Abstract': cannot instantiate abstract class
Я думал, unique_ptr
просто возьмёт указатель без размышлений о том, на что он указывает?