サンプル

Class::~Class() {
// メモリーへの参照をクリーンアップします...
int error = cleanUp();
if(error)
{
throw str;
}
logDestruction(); // 例外をスローする場合があります
}

ソリューション
すべての例外をキャッチすることで、どの例外もデストラクターを残さないようにします。

Class::~Class() {
try {
// メモリーへの参照をクリーンアップします
delete pointer;
logDestruction();
}
catch( ... ) {
// ここですべてのエラーをキャッチします
}
}