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;}
};
テンプレートクラスの2つのインスタンスを作成します
// 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) ため、方法がわかりません。