В С++, если вы хотите динамически выделять массив, вы можете сделать что-то вроде этого:
int *p;
p = new int[i]; // i is some number
Однако, чтобы удалить массив, вы...
delete[] p;
Почему это не delete p[]
? Разве это не было бы более симметричным с тем, как оно было изначально создано? В чем причина (если есть), почему язык был разработан таким образом?