Из стандарта С++ 17 (черновик здесь) [expr.new]:
Если новое выражение создает объект или массив объектов типа класса, доступ и управление неоднозначностью выполняются для функции выделения, функции освобождения и конструктора. Если new-выражение создает массив объектов типа класса, деструктор потенциально вызывается.
Почему new[]
вызывает деструктор? Это новое, в конце концов. Это не удалить.