Это вопрос, который время от времени натыкался на меня. Я всегда думал, что С++ должен быть спроектирован так, чтобы оператор "delete" (без скобок) работал даже с "новым []" оператором.
На мой взгляд, написав это:
int* p = new int;
должен быть эквивалентен распределению массива из 1 элемента:
int* p = new int[1];
Если это верно, оператор "delete" всегда может удалять массивы, и нам не нужен оператор "delete []" .
Есть ли причина, по которой оператор "delete []" был введен в С++? Единственная причина, по которой я могу думать, заключается в том, что распределение массивов имеет небольшой объем памяти (вам нужно где-то хранить размер массива), так что отличия "delete" и "delete []" было небольшой оптимизацией памяти.