resource *hoge(int arg) /*失敗でNULL、成功でリソース(p4)を返す*/
{
 resorce *p1 = NULL,*p2 = NULL,*p3 = NULL, *p4 = NULL;

 p1 = GetResource1(arg); /* GetResoruce*は失敗した時にNULLを返す */
 if(!p1) goto failed;
 処理1
 p2 = GetResource2(p1);
 if(!p2) goto failed;
 処理2
 p3 = GetResource3(p1,p2);
 if(!p3) goto failed;
 処理3
 p4 = GetResource4(p3);
 if(!p4) goto failed;
 処理4

 FreeResource(p3);
 FreeResource(p2);
 FreeResource(p1);
 return p4;
failed:
 if(p4) FreeResource4(p4);
 if(p3) FreeResource3(p3);
 if(p2) FreeResource2(p2);
 if(p1) FreeResource1(p1);
 return NULL;
}

これgoto使わないとどう書く?もちろんスマートポインタ、GC、例外は使用不可。