Для массива POD он не пропустит (с большинством компиляторов). Например, MSVC генерирует идентичный код для delete и delete [] для массива POD .
Лично я думаю, что C / C ++ мог бы быть без оператора delete []. Компилятор знает размер объекта, а выделенный объем памяти известен во время выполнения, поэтому очень просто узнать, является ли массив указателей или нет, и правильно распоряжаться памятью.
EDIT:
ОК, ребята. Можете ли вы проверить на своем компиляторе и сказать, утечка ли он?
Попробуйте думать как разработчик компилятора. У нас есть new , new [] , delete , delete [] . Каждый новый имеет свой собственный delete . Кажется совершенным и полным. Давайте посмотрим, что происходит, когда вы звоните delete [] ?
1. call vector destructor for an object
2. actual free memory
Что такое деструктор для POD ? Ничего такого!
Таким образом, вызов delete для массива POD не утечет! Даже если это нарушает стандарт. Даже если это не рекомендуется.
EDIT2:
Это код разборки, сгенерированный VS2008:
operator delete[]:
78583BC3 mov edi,edi
78583BC5 push ebp
78583BC6 mov ebp,esp
78583BC8 pop ebp
78583BC9 jmp operator delete (78583BA3h)