겸손한 개발을 위한 자양분

__try __finally 내부의

__try __except 는 쉽게 예상가능하듯 다음과 같은 실행 순서를 갖는다.

 

     __try{

        __try{
            //Exception Occured!
        }
        __except(EXCEPTION_EXECUTE_HANDLER){
           
        }

       

    }
    __finally{
       
    }

 

 

__try 문 내의 또다른 __try 문에서 Exception 이 발생하면,

Exception 핸들러가 먼저 호출될까 __finally 구문이 먼저 호출될까?

헷갈릴 수 있지만, __finally 가 먼저 호출된다.

 

     __try{

        __try{
            //Exception Occured!
        }
        __finally{
           
        }

        // 실행되지 않는 라인
    }
    __except(EXCEPTION_EXECUTE_HANDLER){
       
    }

 

 

__try 문 안에서 return 을 하면,

return 에 대한 처리 순서는 다음과 같다.

 

 void fnA()
{
   
}


void main()
{
    __try{
       
        return fnA();

    }
    __finally{
       
    }
}

만약, 동기화객체를 사용하는 함수에서,

동기화를 풀기위해 __finally 구문을 사용하고,

내부에서 (동일한 동기화객체를 사용하는) 다른 함수를 호출하며 리턴한다면

Lock 에 의한 문제가 발생할 수 있으므로 주의해야 한다.