"Exceptions within destructors" are such a bane-of-existence in so very many languages that I have very long ago made it a standard practice to put try/catch blocks around any "complicated" destructors, silently absorbing any exceptions that might occur. The rationale simply being – that, since you are dying anyway, nobody really cares about you anymore. It might cause memory leaks but the bottom line is that the thing keeps going.