Been doing Java for number of years so haven’t been tracking C++. Has finally clause been added to C++ exception handling in the language definition?
Is there a favored idiom that mimics Java’s try/finally?
Am also bothered that C++ doesn’t have an ultimate super type for all possible exceptions that could be thrown – like Java’s Throwable class.
I can write:
try { // do something } catch(...) { // alas, can't examine the exception // can only do cleanup code and perhaps rethrow, ala: throw; }
ADDENDUM EDIT:
I ended up accepting the answer that had the most up votes, i.e., use destructors to do cleanup. Of course, from my own comments, it is clear I don’t entirely agree with that. However, C++ is what it is and so in the application endeavor I have in mind, I’m going to more or less strive to adhere to common community practice. I’ll use template classes to wrap resources that don’t already have a class destructor (i.e., C library resources), thus bestowing on them destructor semantics.
NEW ADDENDUM EDIT:
Hmm, instead of finally then a closure feature perhaps? A closure combined with ScopeGuard approach (see one of the answers below) would be a way to accomplish cleanup with arbitrary actions and access to the cleanup code’s outer scope context. Cleanup could be done in the idiom fashion that is seen in Ruby programming where they supply cleanup blocks when a resource is being opened. Isn’t a closure feature being considered for C++?
By making effective use of destructors. When an exception is thrown in a try block, any object created within it will be destroyed immediately (and hence its destructor called).
This is different from Java where you have no idea when an object’s finalizer will be called.
UPDATE: Straight from the horse’s mouth: Why doesn’t C++ provide a ‘finally’ construct?