thought:

say you had code such as this...

NOTE: using C...

Code:

object* factory(parameter1, parameter2, para....)
{
   object* a = allocate memory;

   if(!a)
      return NULL;

   a->member1 = allocate memory based on parameter1;
   if(!a->member1)
   {
      free(a);
      return NULL;
   }

   a->member2 = allocate memory based on parameter2;
   if(!a->member2)
   {
      free(a);
      free(a->member1);
   }

/// etc................
    return a;
}
error handling code is redundant... and continually grows longer....

solution 1:

Code:
void FAIL(object* obj)
{
    free(obj->member2);
    free(obj->member1);
//    etc....
    free(obj);
}

object* factory(parameter1, parameter2, para....)
{
   object* a = allocate memory zeroed memory;

  if(!a)
      return NULL;

  if(!(a->member1 = allocate memory based on parameter1))
  {
      FAIL(a);
      return NULL;
  }

  if(!(a->member2 = allocate memory based on parameter2))
  {
      FAIL(a);
      return NULL;
  }


/// etc................

    return a;
}
requires a specialized function... but it works and is cleaner...

solution 2:

Code:

object* factory(parameter1, parameter2, para....)
{
   object* a = allocate memory zeroed memory;

  if(!a)
      return NULL;

  if(!(a->member1 = allocate memory based on parameter1))
       goto FAIL;

  if(!(a->member2 = allocate memory based on parameter2))
       goto FAIL;

/// etc................

    return a;

    FAIL:
    free(a->member2);
    free(a->member1);
 //   etc....
    free(a);
    return NULL;
}
cleaner requires no function... uses goto(OH NOES!!!!!)...

comments... suggestions? thoughts?