我有模板类 Array
其中模板类型 T
应该是指针或非指针类型。
template<class T>
class TArray
{
static const int max_len=100;
T* data;
int length;
public:
TArray(){data=new T[max_len]; this->length=0;}
void Add(T value){data[length++]=value;}
~TArray();
};
问题是如何释放空间,因为我们不能调用delete
对于不是这样的指针类型
template<class T>
TArray<T>::~TArray()
{
//for(int i =0; i < length; i++)
// delete data[i]; // NOT WORKING WITH OBJECTS THAT ARE NOT POINTERS !!!
delete[] data;
}
让我们上加法课吧
class A
{
int* a;
public:
A(int n){a = new int[n];}
~A(){delete[] a;}
};
并创建两个模板类的实例
// Create array of doubles
TArray<double>* double_array = new TArray<double>();
delete double_array;
// Create array of pointers to class A
TArray<A*>* A_array = new TArray<A*>();
A* a = new A(5);
A_array->Add(a);
delete A_array;
当我为 TArray<A*>
调用析构函数时我需要为类 A
调用析构函数但我不知道怎么做,因为如果我们制作 double 组,则析构函数中的注释代码无法编译 (C2541)。
最佳答案
在析构函数中,您可以使用 std::is_pointer
然后只delete[]
数据。
首选的替代方案是不自己管理内存(使用 std::vector
或智能指针)。
关于c++ - 模板类 c 中的析构函数 : How to delete field which may be pointer or not pointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13014286/