Удаляет ли [] освобождение памяти, выделенной указателями на указатели

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

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

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

4 ответа

Решение

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

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

for (int i = 0; i < n; ++i)
    delete array[i];
delete[] array;

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

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

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

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

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

Другие вопросы по тегам