■ C++ 예외처리
ㆍ 예외처리 메커니즘
1. try
- try 블록은 예외 발생에 대한 검사의 범위를 지정
- 해당 범위에서 예외가 발생하면 catch 블록에서 처리가 되고, 발생하지 않으면 catch 블록을 뛰어 넘긴다.
- try 블록을 묶는 기준은 예외가 발생할만한 영역을 하나의 "일(Work)" 단위로 구성한다.
try
{
// 예외 발생 범위
}
2. catch
- catch 블록은 try 블록에서 발생한 예외를 처리하는 코드가 담기는 영역
catch(처리할 예외의 종류 명시)
{
// 예외처리 코드
}
3. throw
- 예외가 발생했음을 알리는 키워드로, 예외 상황에 대한 정보를 전달한다.
- throw except : except는 예외 상황에 대한 정보를 담고 있으며, 변수, 상수, 객체 등 모든 데이터가 될 수 있다.
4. 예외 클래스
- 예외 발생을 알리는 데 사용되는 객체의 생성을 위해 정의된 클래스
- 객체를 이용해서 예외상황을 알리면, 예외가 발생한 원인에 대한 정보를 자세히 담을 수 있다.
5. 추가 내용
1) throw에 의해 던져진 예외 데이터의 자료형과 catch 블록의 매개변수 자료형은 일치해야 한다.
2) 함수 내에서 예외가 발생할 수 있는 경우, 다음과 같이 발생 가능한 예외의 종류를 명시해주는 것이 좋다.
- 다른 자료형의 예외 데이터가 전달될 경우, terminate 함수가 호출되어 종료된다.
- int ThrowFunc(int num) throw (int, char) { ... }
=> ThrowFunc 함수에서는 int, char 형 예외 데이터가 전달 될 수 있다는 의미이다.
=> throw () : 자료형 부분을 비어 표시하면 어떠한 예외도 전달하지 않음을 의미한다. 따라서 해당 함수가 예외를 전달할 경우 프로그램은 그냥 종료된다.
3) 여러 개의 catch 블록을 구성하게 되면, 예외 발생 시 위에서부터 아래로 순차적으로 찾는다.
4) new 연산자에 의해 메모리 공간의 할당이 실패하면 bad_alloc이라는 예외가 발생한다.
5) catch(...) : ...은 전달되는 모든 예외를 다 받아주겠다는 의미이다. 대신 예외에 관련해서 어떠한 정보도 받을 수 없다.
6) catch로 전달된 예외는 다시 던져질 수 있다.
'Coding > C & C++' 카테고리의 다른 글
C++ 템플릿 (0) | 2020.03.03 |
---|---|
C++ 연산자 오버로딩 3(포인터 , (), 형 변환 연산자) (0) | 2020.03.01 |
C++ 연산자 오버로딩 2(대입, 배열의 인덱스, new/delete 연산자) (0) | 2020.03.01 |
C++ 연산자 오버로딩 1(기본 연산자, 단항 연산자, << 연산자) (0) | 2020.02.26 |
C++ 가상 함수 (0) | 2020.02.25 |