c++ - 如何创建类模板数组?

标签 c++ arrays templates object reference

我需要在 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/

相关文章:

c++ - 奇怪的 C++ 模板和常量问题

c++ - 包含类定义的模板容器,只需要多个模板参数之一

c++ - 如何删除指向动态分配对象的指针数组

c - 指针递增

ios - 如何使用解析数据库在 iOS 应用程序中实现好友添加/删除功能?

java - 如何创建一个方法来移动数组中的字符?

c++ - 如何通过Matlab Mex编译工具使用C++编译器

c++ - 为什么 Xcode 无法识别此 .cpp 文件中的 free() 和 malloc()?

c++ - 寻找模式 C++

c++ - 如何使用内部模板构造模板化函数?