C++ удаления элементов с динамического массива

167
03 октября 2018, 08:30

Создаем динамический массив:

Array *arr = new Array[2];

После добавим в него два элемента:

Array* arr0 = new Array();
Array* arr1 = new Array();
arr[0] = *arr0;
arr[1] = *arr1;

В деструкторе класса Array я хочу сделать сначала итерацию по всем элементам массива и для каждого отдельно вызвать delete, так как все они были созданы с помощью оператора new, а только после этого вызвать delete[] arr. Но такая конструкция не работает:

for(int i = 0; i < size; i++)
{
   delete *arr[i];
}

Ошибка: отсутствует оператор *, соответствующий этим операндам.

Вопрос: Как реализовать удаления указателей из динамического массива?

Answer 1

Здесь

arr[0] = *arr0;
arr[1] = *arr1;

вы скопировали (присвоением) объекты. При удалении массива для этих копий деструкторы будут вызваны автоматически. А чтоб удалить исходные объекты -

delete arr0;
delete arr1;

к вашим услугам...

Вот если бы вы делали

Array ** arr = new Array*[2];
Array* arr0 = new Array();
Array* arr1 = new Array();
arr[0] = arr0;
arr[1] = arr1;

тогда дело другое, тогда перед удалением массива надо было бы выполнить

delete a[0];
delete a[1];
READ ALSO
Кадр не находится в модуле

Кадр не находится в модуле

Пишу небольшой движок на C++ с SDL2 и графикой OpenGLПисал код, всё было нормально, но вчера вдруг начала появляться такая вот ошибка

149
Как сделать рекурсивный поиск по файлам только определенного расширения?

Как сделать рекурсивный поиск по файлам только определенного расширения?

Есть такая функция, которая ищет файлы в выбранном каталоге и его подкаталогах, а потом записывает пути к файлам в datatxt

144
Как задать директорию С++

Как задать директорию С++

Мне нужно взаимодействовать с файлом paroli_ot_vk_druzeitxt

181