Avatar von Helmut Zeisel
  • Helmut Zeisel

811 Beiträge seit 03.02.2000

Re: Exception Handling in C: try - catch - finally und throw

DevCouch Podcast schrieb am 13.05.2021 19:57:

Bei deinen Beispielen geht es aber immer um Ressourcen-Handling.

Es geht beim finally-keyword aber nicht um Ressourcen, sondern darum, auf Ebene des Aufrufs anzugeben, welcher Code - unabhängig vom Fehlerfall - ausgeführt wird, das könnte auch

try { operation.ExecuteFoo(); } finally { logger.Info("GetDataCompleted"); }

sein.

Ja, so etwas Ähnliches verwende ich auch immer wieder. Das geht ebenfalls wiederverwendbar mit einem Destruktor:

class MyLogger { const char* t; public: MyLogger(const char* txt): t(txt) {} ~MyLogger() { logger.Info(t); } }; void GetData() { MyLogger("GetDataCompleted"); operation.ExecuteFoo(); }

Ansonsten: wenn Du unbedingt so etwas wie "finally" imitieren willst, geht das beispielsweise auch so:

void GetData() { std::exception_ptr eptr; try { operation.ExecuteFoo(); } catch(...) { eptr = std::current_exception(); } logger.Info("GetDataCompleted"); if (eptr) { std::rethrow_exception(eptr); } }
Bewerten
- +