On Monday, 1 April 2013 at 12:12:56 UTC, Lars T. Kyllingstad
wrote:
But if all cleanup code is bypassed, what is the point in using
the exception mechanism in the first place? Why not just
abort() and be done with it?
I can think of two reasons for throwing an Error rather than
aborting directly:
1. You want a kind of "graceful" shutdown, in which destructors
*are* called and make their best attempt at cleaning things up.
2. You want to catch it at some point, and perform some manual
cleanup.
But if (1) does not happen, can you even hope to do something
useful with (2)? Your program is in the worst possible state
it can be!
I'm no expert on these things, but:
Any chance of being in an invalid state - > undefined behaviour
Undefined behaviour - > your destructors/cleanup routine could in
theory do anything.
Therefore, you're better off not trying to cleanup if program
state could be invalid.
Anything that doesn't signal a possible invalid state should be
sensibly catchable and run destructors etc. , anything that does
should cut through the program like a knife and is catchable at
your own risk.