The lifetime of an object begins when its constructor finishes its execution. That means, before the end of the constructor execution, the object did never exist. So, there's no live object, and thus, there is no destructor to call.
Consequently, there's no undefined behaviour, unless the creation of the exception object throws another exception. In such a case, the program aborts inmediatly.
However, any other object fully constructed before the exception is destructed appropriately, including base subobjects, other member objects, local objects declared in the same scope of the function throwing the exception, and any other objects of previous scopes which don't catch that exception.
Check it out, stack unwinding (on stackoverflow, google and wikipedia, in that order of preference).