Why would a new[] expression ever invoke a destructor?

If construction of any object in the buffer throws an exception, the previously constructed objects must be destructed. That requires an available destructor.