예외를 throw하고 catch하는 일반적인 방법은 예외 개체를 throw하고 참조 (일반적으로 const
참조) 로 포착하는 것 입니다. C ++ 언어를 사용하려면 컴파일러가 예외 개체를 생성하고 적절한 시간에 적절하게 정리하기 위해 적절한 코드를 생성해야합니다.
동적으로 할당 된 개체에 대한 포인터를 던지는 것은 결코 좋은 생각이 아닙니다. 예외는 오류 상황에서보다 강력한 코드를 작성할 수 있도록합니다. 일반적인 방식으로 예외 객체를 던지면 올바른 유형을 명명하는 catch 절에 의해 포착 catch (...)
되는지, 다시 던 졌는지 여부에 관계없이 적절한 시간에 올바르게 파괴되는지 확인할 수 있습니다. (아무것도 잡히지 않는 유일한 예외는 당신이 그것을 보는 방법에 관계없이 이것은 복구 불가능한 상황입니다.)
동적으로 할당 된 객체에 대한 포인터를 던지면 예외를 던지고 싶은 지점에서 호출 스택이 어떤 모양이든간에 올바른 포인터 유형을 명명하고 적절한 delete
호출 이있는 catch 블록이 있는지 확인해야합니다 . catch (...)
해당 블록이 예외를 다시 던지고 예외를 올바르게 처리하는 다른 catch 블록에 의해 포착되지 않는 한 예외를 포착해서는 안됩니다 .
사실상 이것은 강력한 코드를 더 쉽게 작성하고 모든 상황에서 올바른 코드를 작성하는 것을 매우 어렵게 만드는 예외 처리 기능을 사용했음을 의미합니다. 이것은이 기능을 기대하지 않는 클라이언트 코드에 대한 라이브러리 코드로 작동하는 것이 거의 불가능하다는 문제를 제쳐두고 있습니다.
throw gcnew
예를 들어 유용 할 것이라고 생각 합니다. 관리 코드에서 예외를 포착하려는 경우. 누군가 나를 고칠 수 있습니까?