try-catch-finally блок

dix75
dix75

Думаю объяснения излишне, но приведу два примера возможного использования

1.

try {
}
catch(...) {
}
finally {
}

 

2. 

try {
}
finally {
}
-10
рейтинг
6 комментариев
yndx-antoshkka
В данный момент обсуждаются близкие идеи:
1) std::scope_exit, std::scope_success, std::scope_fail open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0052r2.pdf
2) анонимные переменные (что-то наподобие lock_guard(mutex_) { /* your code goes here */ }

Пункт 1) - более функциональный, пункт 2) - красивее по синтаксису и не привязан к try {}

finally хорошо смотрится в языках где нет деструкторов или время их вызова не гарантировано. В C++ принято описывать логику в деструкторах. При этом ограничения у finally будут такие же как и у деструкторов, но о деструкторах все уже в курсе:
struct foo {
~foo() { throw 3; } // bad! many people know that!
};

// ...

try {
throw 1; // throws
} finally {
throw 2; // std::terminate, surprise!
}
yndx-antoshkka
dix75
yndx-antoshkka,
Спасибо во многом согласен, но в C++ на сколько я помню все-таки добавили Garbage Collector хоть и опционально, в этом случае время вызова деструктора как раз не определено.
dix75
Михаил Мальцев
В C++ намеренно нет finally:
stroustrup.com/bs_faq2.html#finally
Михаил Мальцев
dix75
Михаил Мальцев,
Все не так однозначно в С++/CLI finally есть..
dix75
jaroslavleff
Михаил Мальцев, а в Core Guidelines тот же Страуструп предлагает finally :-)
jaroslavleff
yndx-antoshkka
jaroslavleff, не верьте ему, он троллит :)
yndx-antoshkka
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).