전 씁니다만.... 다들 극도로 꺼려하시더라구요...
일단 제가 쓰는 용도는 실패시 처리를 위함입니다. try catch써도 될거 같긴하지만... 일단 제일 편해서 ^^;;
사실 이런 용도를 본게 어디서 봤더라... 하도 오래전에 본거라 기억도 가물가물...
mfc 코드 추적하다 봤던가... 옛날 오거 엔진 만지다봤던가... DirectX 셈플소스였던가.... 암튼 다른소스 디버깅하다 본건데요
예를들어
int Init()
{
int step=0;
classA *a=NULL,*b=NULL,*c=NULL;
a=new classA;
if(a->init()==false)
goto initFailed;
step=1;
b=new classA;
if(b->init()==false)
goto initFailed;
step=2;
c=new classA;
if(c->init()==false)
goto initFailed;
return 3;
initFailed:
SAFE_DELETE(a);
SAFE_DELETE(b);
SAFE_DELETE(c);
return step;
}
위와 같은 소스가 있을경우 a가 init 실패하면 걍 delete a하고 return 하면 되지만...
b나 c쯤가면 일일이 a와 b까지 delete해줘야하고.. 여기선 그나마 delete만 하면 끝이지만
실제 사용되는 소스들보면 좀만 귀찮게되면 일일이 해제 해줄 부분도 많고...
실수로 까먹으면 아주 주옥되는경우도 있고 ㅎㅎㅎㅎ
위소스처럼 initFailed부분에 모든 경우의 해제를 다몰아둔다음 goto하면 아주 깔끔하게 해제됩니다.
조아요~ ㅎㅎ
뭐 try catch와 비슷하긴하네요 throw대신 goto