Удаляет ли [] освобождение памяти, выделенной указателями на указатели
У меня есть массив указателей на другие объекты под названием Comparable* array
(внутри шаблона для класса).
Я это понимаю delete
удаляет память, на которую ссылается указатель, и что delete []
освобождает память, назначенную каждому указателю в массиве.
Мой вопрос: если у меня есть массив, который содержит указатели на другие объекты, как мне освободить память, на которую ссылается каждый указатель в массиве и сам массив?
4 ответа
если у меня есть массив, содержащий указатели на другие объекты, как мне освободить память, на которую ссылается каждый указатель в массиве И сам массив?
Как вы только что описали:) Выполните цикл по массиву, чтобы удалить каждый объект, а затем удалите массив:
for (int i = 0; i < n; ++i)
delete array[i];
delete[] array;
delete[] вызывает деструктор для каждого объекта в массиве, если такой деструктор существует. Для массива указателей delete[] не освобождает каждый указатель, так как указатель имеет простой тип без деструктора. Вам нужно удалить каждый указатель в коде.
Вам нужно перебрать массив, чтобы освободить места, на которые ссылаются индексы массива, и вам нужно освободить сам массив в конце, после цикла.
Примечание. Предполагается, что вы динамически распределены с помощью new[]
Нет, это не так.
delete[]
удаляет массив объектов, выделенных с помощью new[]
, а не массив указателей.