Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法使_成为唯一的基类_C++_Unique Ptr - Fatal编程技术网

C++ 无法使_成为唯一的基类

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 { }

这里的代码抱怨带有push_back的行试图创建一个抽象类型的对象

#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);