テンプレート化されたクラス myFoo があります。これは、プリミティブ型または複雑な型へのポインターのいずれかである T 型の「もの」を格納します。myFoo が削除されたら、たまたま格納されているすべてのものに関連付けられているすべてのメモリを解放したいと考えています。これは、格納されているすべてのポインターで削除を呼び出す必要があることを意味しますが、プリミティブで削除を呼び出すことになる可能性もあります。これは安全ですか??
何が起こっているのかをよりよく強調するために、以下に myFoo のスケッチを含めました。デストラクタの動作が適切に定義されているかどうかはわかりません。
template<class T>
class myFoo
{
public:
myFoo(int size)
{
size_ = size;
T* foo = new T[size_];
}
void addFoo(T tmp, int index)
{
foo[index] = tmp;
}
virtual ~myFoo()
{
for(int i=0; i < size_; i++)
{
delete foo[i];
}
delete [] foo;
}
private:
int size_;
T* foo;
}