The intention of exceptions it that handling should be deferred to a point where something useful can be done, whether that's notifying the user, re-trying, or whatever. So, catching exceptions in every function is generally poor design.
As Justin says, you may need to catch and re-throw an exception to do local cleanup - this would explain the C# code.
In C++ the idiomatic approach is RAII, which instead uses deterministic destruction to perform the local cleanup, and avoids catch handlers that don't-really-handle-but-just-re-throw.