例外の発生中に、新たな例外を投げることはできない。
デストラクターの中で例外を使うというのは、問題になる。
例外を投げた結果、デストラクターが実行されているとしたらどうなる?

struct S
{
~S()
{
try {
throw 0 ;
} catch(...) { }
}
} ;

void f()
{
S s ;
throw 0 ;
// sのデストラクターを呼び出す
}

この例では、S::~S()の外には例外を投げないものの、
すでに例外が発生しているので、デストラクター内のthrow文を実行した時点で、
例外が重複することになり、エラーとなる。

したがって、例外を投げたことによるデストラクターの実行ではない保証できる場合でしか、
デストラクターの中で、安全に例外を使うことはできない。