If the initialization or destruction of an object
other than by delegating constructor
is terminated by an exception,
the destructor is invoked for
each of the object's direct subobjects
and, for a complete object, virtual base class subobjects,
whose initialization has completed (
[dcl.init])
and whose destructor has not yet begun execution,
except that in the case of destruction, the variant members of a
union-like class are not destroyed
.