The rule of thumb for exceptions in destructor: they must never throw.
Desctructor can be called in one of two ways:
normal mode
call during exception handling
in the later emitting an exception cause undefined behaviour most likely terminate()
~X::X() throw() try { ... } catch( ... ) { ... }
Destructor must never emit exception!