Создаем динамический массив:
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];
}
Ошибка: отсутствует оператор *, соответствующий этим операндам.
Вопрос: Как реализовать удаления указателей из динамического массива?
Здесь
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];
Сборка персонального компьютера от Artline: умный выбор для современных пользователей