Удаляет ли [] освобождение памяти, выделенной указателями на указатели - PullRequest
1 голос
/ 13 сентября 2011

У меня есть массив указателей на другие объекты с именем Comparable* array (внутри шаблона для класса).

Я понимаю, что delete удаляет память, на которую ссылается указатель, и что delete [] освобождает память, назначенную каждому указателю в массиве.

У меня вопрос: если у меня есть массив, содержащий указатели на другие объекты, как мне освободить память, на которую ссылается каждый указатель в массиве и сам массив?

Ответы [ 4 ]

8 голосов
/ 13 сентября 2011

если у меня есть массив, содержащий указатели на другие объекты, как мне освободить память, на которую ссылается каждый указатель в массиве И сам массив?

Как вы только что описали:) Выполните цикл по массиву, чтобы удалить каждый объект, а затем удалите массив:

for (int i = 0; i < n; ++i)
    delete array[i];
delete[] array;
5 голосов
/ 13 сентября 2011

delete [] вызывает деструктор для каждого объекта в массиве, если такой деструктор существует.Для массива указателей delete [] не освобождает каждый указатель, поскольку указатель имеет простой тип без деструктора.Вам нужно удалить каждый указатель в коде.

1 голос
/ 13 сентября 2011

Вам нужно перебрать массив, чтобы освободить места, на которые ссылаются индексы массива, и вам нужно освободить сам массив в конце, после цикла.

Примечание. Предполагается, что вы динамически распределены с использованием new[]

0 голосов
/ 13 сентября 2011

Нет, это не так.

delete[] удаляет массив объектов, выделенных с помощью new[], а не массив указателей.

...