I'm guessing this goes to using the language's built in object destruction to your advantage.
So try...finally means you run some code which may fail (you can check for errors) but regardless of error status you'd always want to run the finally block.
The finally block could be implemented using an object which receives a function pointer (e.g. cleanup code) upon construction, and runs that code upon destruction. i.e. since the destructor is guaranteed to be called when the function exits, the function pointer will always be called.