The alternative is: do the cleanup at every return, use goto or use try/finally. 1)Cleanup at every return is madness. Most functions in ros do a large amount of cleanup at each return and I sometimes spot mistakes where one/more return misses some cleanup. Those errors are _hard_ to find.
The functions are too large then. Use more smaller functions instead.
Casper