delete[] an array of objects delete[] an array of objects arrays arrays

delete[] an array of objects


Every use of new should be balanced by a delete, and every use of new[] should be balanced by delete[].

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

That would be appropriate only if you initialized the array as:

Objects **array = new Objects*[N];for (int i = 0; i < N; i++) {     array[i] = new Object;}

The fact that your original code gave you a compilation error is a strong hint that you're doing something wrong.

BTW, obligatory: avoid allocating arrays with new[]; use std::vector instead, and then its destructor will take care of cleanup for you. Additionally it will be exception-safe by not leaking memory if exceptions are thrown.


Just delete[] array is sufficient. It is guaranteed that each element of the array is deleted when you delete an array using delete[] operator.


As a general rule you should delete/delete[] exactly those things that you allocated with new/new[]. In this case you have one allocation with new[], so you should use one call to delete[] to free that allocated thing again.

That the deletes in the for-loop won't compile is also a good indication that they are not the right way to do it.