我需要在C++中创建一个类模板数组,但是编译器不允许这样做。
范例:

class CRefBase {
public:
    virtual ~CRefBase() = 0;
};

template<class T>
class CRef : public CRefBase {
private:
    T *Obj;
public:
    CRef(T *Obj){ this->Obj=Obj; }
}

在主要功能上
CRefBase *refs;
refs=new CRefBase[200]; // Error in this line : cannot allocate an object of abstract type ‘CRefBase’

我看到this主题,但这不是我的答案。

谢谢

最佳答案

即使您尝试实例化派生类,这也是一个糟糕的主意,因为无法以这种方式对数组进行索引-当您使用0以外的任何索引来索引CRefBase的指针时,它们只能是CRefBase,而不能为任何派生类。

此外,在new[]的使用中存在大量异常不安全和内存泄漏,所有合理的代码库都禁止使用它。使用诸如std::vector<std::unique_ptr<CRefBase>>之类的东西是安全的,然后,如果您创建派生类类型的对象,则实际上可以创建一个可以运行的程序。

09-25 18:53