Как корректно вызвать деструктор
Возможно, вопрос довольно глупый, но я что-то не могу понять как корректно вызвать деструктор при таком выделении памяти:
Class_Name* arr[3];
arr[0] = new Class();
arr[1] = new Class(2);
arr[2] = new Class(3, 3);
Вот так:
delete[] arr;
Или так:
for(int i=0; i<3; ++i)
delete arr[i];
Или вообще как-то по-другому ?
Ответы (1 шт):
Если бы вы вызвали так : Class * * arr = new Class * [ 3 ] ;, и потом выделяли память :
arr[0] = new Class();
arr[1] = new Class(2);
arr[2] = new Class(3, 3);
то сначала нужно опять циклом освобождать память :
for(int i=0; i<3; ++i)
delete arr[i];
а потом ещё освобождать память от трёх указателей с помощью delete [ ] arr ;. Эта команда сначала вызовет деструктор трёх указателей (то есть ничего не будет делать, так как у указателей нет деструкторов), а потом освободит память от них.
Так как у вас массив скорее всего в стеке, то от этого массива освобождать память вручную не надо, и останется только циклом удалить объекты arr[i] из свободной памяти.
for(int i=0; i<3; ++i)
delete arr[i];