65.9K
CodeProject is changing. Read more.
Home

The goto-less goto!

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0 vote)

Feb 7, 2011

CPOL
viewsIcon

4361

As this piece of code is normally a function, should be more readable if all of it is put inside a function returning a bool, indicating success or failure.The cleanup function could be only resource deallocation, not a function at all. If it is intended to use with C++ or C#, a try..finally...

As this piece of code is normally a function, should be more readable if all of it is put inside a function returning a bool, indicating success or failure. The cleanup function could be only resource deallocation, not a function at all. If it is intended to use with C++ or C#, a try..finally block should be more appropriate. This piece of code use a try block, which is not super performatic at all, but ensure that all allocated resource are properly freed.
  bool DoOperations()
  { 
    try
    {
      if(condition1_fails)
      {
        return false;
      }
      ...
      if(condition2_fails)
      {
        return false;
      }
      ...
      ...
      if(conditionN_fails)
      {
        break false;
      }
 
      PerformActionOnAllSuccess();

      return true;
    }
    finally
    {
      if (condition1_resource != null)
      {
        // free condition1_resource
      }

      if (condition2_resource != null)
      {
        // free condition2_resource
      }

      ...

      if (conditionN_resource != null)
      {
        // free conditionN_resource
      }
    }
  }