Пример

Class::~Class() {
// Удаление ссылок на память ...
int error = cleanUp();
if(error)
{
throw str;
}
logDestruction(); // Может быть сформировано исключение
}

Решение
Обработка всех исключений, чтобы ни одного исключения не вышло за пределы деструктора.

Class::~Class() {
try {
// Удаление ссылок на память
delete pointer;
logDestruction();
}
catch( ... ) {
// обработка всех ошибок здесь
}
}