Coding/C & C++

C++ 예외처리

heyoon2j 2020. 3. 4. 17:46

 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로 전달된 예외는 다시 던져질 수 있다.