Могу ли я вызвать удаление для примитивов?

У меня есть шаблонный класс 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;
}
5
задан Brian Tompsett - 汤莱恩 23 August 2015 в 11:19
поделиться