我需要在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>>
之类的东西是安全的,然后,如果您创建派生类类型的对象,则实际上可以创建一个可以运行的程序。