try
, throw
, catch
문try {
...
if(에러 발생)
throw errcode1;
...
if(에러 발생)
throw errcode2;
...
if(에러 발생)
throw errcode3;
}
catch(int errcode) {
...
}
catch
문은 여러 개로 구현할 수 있는데, 이를 'catch 다중화'라고 한다.throw
문으로 예외를 던질 때 값의 자료형이 int
인 경우와 char
인 경우를 각각 다른 catch
문으로 처리할 수 있다.적절한 catch
문이 없는 경우를 대비하여 다음과 같이 어떤 형식이든 받아들이는 catch
문 블록을 만들 수 있다.
try {}
catch(...) {
~~~
}
catch
문 블록은 값의 형식에 따라 다중화가 가능한데, 이 형식에는 사용자 정의 클래스도 포함된다.CMyException
따위의 클래스를 정의하여, 예외가 발생한 경우에 대해 여러 가지 정보를 포함할 수 있다.catch
문으로 흐름이 넘어가게 된다.배열 등의 메모리를 할당할 때, 잘못된 값이 전달될 경우 다음과 같이 예외 처리를 활용할 수 있다.
int main(int argc, char* argv[]) {
char *data;
int size;
cout << "Input Size: ";
cin << size;
try {
data = new char[size];
}
catch(bad_alloc &e) {
cout << e.what() << endl;
}
}