我需要在 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主题,但这不是我的答案。
谢谢
最佳答案
即使您尝试实例化派生类,这也是一个糟糕的想法,因为无法以这种方式对数组进行索引 - 当您对指向 CRefBase
的指针进行索引时对于 0 以外的任何索引,它们必须只能是 CRefBase
, 并且不能是任何派生类。
此外,在使用 new[]
时存在大量异常不安全和内存泄漏问题。 ,所有合理的代码库都禁止使用它。使用类似 std::vector<std::unique_ptr<CRefBase>>
的东西是安全的,然后如果您创建派生类类型的对象,您实际上可能会创建一个有效的程序。
关于c++ - 如何创建类模板数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34370407/