Я знаю, что деструктор не должен выбрасывать исключение.
http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.13
У меня есть следующий код:
~a()
{
cleanup();
}
// I do not expect exception being thrown in this function.
// If exception really happen, I know that it is something not recoverable.
void a::cleaup()
{
delete p;
}
В моем статическом анализе исходного кода он жалуется, что я вызову функцию очистки следующим образом:
~a()
{
try {
cleanup();
}
catch(...) {
// What to do? Print out some logging message?
}
}
// I do not expect exception being thrown in this function.
// If exception really happen, I know that it is something not recoverable.
void a::cleaup()
{
delete p;
}
Я не уверен, что это хорошая практика - помещать блок try ... catch в деструктор всякий раз, когда он вызывает функции. As:
(1) Если функция очистки может генерировать исключение, я знаю, что случилось что-то плохое. Я предпочитаю, чтобы он был fail-fast . То есть, пусть вся система рухнет, а программист отладит ее.
(2) Накладные расходы возникают при входе и выходе из блока try ... catch.
(3) Код выглядит громоздким, с большим количеством попыток ... ловить блок вокруг деструктора классов.
Я могу пропустить некоторые другие моменты, зачем пытаться ... блок catch должен быть на месте.
Спасибо.