У меня есть шаблонный класс 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;
}