C++ 无法使_成为唯一的基类
这里的代码抱怨带有push_back的行试图创建一个抽象类型的对象C++ 无法使_成为唯一的基类,c++,unique-ptr,C++,Unique Ptr,这里的代码抱怨带有push_back的行试图创建一个抽象类型的对象 #include <vector> #include <memory> class Abstract { public: Abstract() {} virtual void f() = 0; }; class Derived : public Abstract { public: Derived() {} void f() override { }
#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;
}
我以为unique\u ptr只会使用指针,而不考虑它指向什么?make\u unique创建一个类型为T的对象。始终。它基本上返回唯一的_ptrnewtargets
如果您自己使用new创建指针,则不希望传递该指针以使_唯一。除非你在做“使_唯一”或是用指针指向某个对象
您可以推送_backsd::unique _ptrnew-Derived,也可以放置_backnew-Derived(如果愿意)。您可以使用放置_back在适当的位置构建对象:
那我该怎么办呢?在unique_ptr之前,我有一个抽象向量*@TopologicalSort std::make_unique就是你想要的,恐怕这对错误没有任何影响。
error C2259: 'Abstract': cannot instantiate abstract class
vec.emplace_back (new Derived);