C-Funktion mit Seiteneffekten im try/catch block
-
Was passiert eigentlich wenn man hier
try { funktion_mit_seiteneffekt(); funktion_die_exception_werfen_kann(); } catch (std::exception& ex) { std::cerr << "oops" << std::endl; }eine Exception wirft? Wird der Seiteneffekt der Funktion mit Seiteneffekt dann rückgängig gemacht?
2. Wenn man die Reihenfolge der Funktionsaufrufe vertauscht, ist dann garantiert, dass die Seiteneffekt-behaftete Funktion nie aufgerufen wird, wenn die Exception fliegt?
-
exzeptionell schrieb:
Wird der Seiteneffekt der Funktion mit Seiteneffekt dann rückgängig gemacht?
Nein.
exzeptionell schrieb:
2. Wenn man die Reihenfolge der Funktionsaufrufe vertauscht, ist dann garantiert, dass die Seiteneffekt-behaftete Funktion nie aufgerufen wird, wenn die Exception fliegt?
Ja. (Threads mal außen vor)
-
exzeptionell schrieb:
Was passiert eigentlich wenn man hier
try { funktion_mit_seiteneffekt(); funktion_die_exception_werfen_kann(); } catch (std::exception& ex) { std::cerr << "oops" << std::endl; }eine Exception wirft? Wird der Seiteneffekt der Funktion mit Seiteneffekt dann rückgängig gemacht?
Wenn du einen Apfel isst und danach eine Banane wirfst, kotzt du dann den Apfel wieder aus?
Edit: Kurz - zuerst wird der Seiteneffekt etwas beinflussen, danach wird die Exception geworfen und der
try-Block verlassen.