Удалить оператор и массивы? - PullRequest
6 голосов
/ 06 января 2010

У меня есть abstract Base класс и Derived класс.

int main ()
{
  Base *arrayPtr[3];

  for (int i = 0; i < 3; i++)
  {
    arrayPtr[i] = new Derived();
  }

  //some functions here

  delete[] arrayPtr;

  return 0;
}

Я не уверен, как использовать оператор удаления. Если я удалю массив указателей базового класса, как показано выше, вызовет ли этот вызов деструкторы объектов производного класса и очистит ли память?

Ответы [ 11 ]

0 голосов
/ 06 января 2010

Убедитесь, что Base имеет виртуальный деструктор. Затем, как fretje обведено , удалите каждый элемент в массиве, затем удалите массив.

Вы должны использовать std::vector для массива. Тем не менее, вы должны действительно использовать контейнер, созданный для такого рода вещей. (Таким образом, вы не случайно не удалите все элементы, что, безусловно, будет иметь место, если будет сгенерировано исключение!).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...