Ed and aix are right, but there is much more going on underneath the hood.
If you use new, then delete, the delete call will execute one destructor.
If you use new[], you must use delete[], but how can delete[] know how much destructors to call? There might be an array of 2 instances, or one of 2000 instances?
What some (possibly most or all) compilers do, is to store the number of instances right before the memory it returns to you.
So if you call new[5], then new will allocate memory like this:
+---+-----------+-----------+-----------+-----------+-----------+
| 5 | instance1 | instance2 | instance3 | instance4 | instance5 |
+---+-----------+-----------+-----------+-----------+-----------+
And you get a pointer back to instance1.
If you later call delete[], delete[] will use the number (in this case 5) to see how many destructors it needs to call before freeing the memory.
Notice that if you mix new with delete[], or new[] with delete, it can go horribly wrong, because the number might be missing, or the number might be incorrect.
If mixing new[1] with delete works, you might be just lucky, but don't rely on it.