The difference between delete and delete[] in C++ [duplicate]

You delete [] when you newed an array type, and delete when you didn't. Examples:

typedef int int_array[10];

int* a = new int;
int* b = new int[10];
int* c = new int_array;

delete a;
delete[] b;
delete[] c; // this is a must! even if the new-line didn't use [].

delete and delete[] are not the same thing! Wikipedia explains this, if briefly. In short, delete [] invokes the destructor on every element in the allocated array, while delete assumes you have exactly one instance. You should allocate arrays with new foo[] and delete them with delete[]; for ordinary objects, use new and delete. Using delete[] on a non-array could lead to havoc.


  • If you allocate with malloc(), you use free()
  • If you allocate with new you use delete
  • If you allocate with new[] you use delete[]
  • If you construct with placement-new you call the destructor direct
  • If it makes sense to use vector rather than new[] then use it
  • If it makes sense to use smart-pointers then use them and don't bother to call delete (but you'll still need to call new). The matching delete will be in the smart-pointer.

https://isocpp.org/wiki/faq/freestore-mgmt


You have to use delete [] if you allocated memory on the heap with operator new[] (e.g. a dynamic array).

If you used operator new, you must use operator delete, without the square brackets.

It is not related to deleting a built-in type or a custom class.