{
개요
이번 포스팅은 예외를 발생시키는 좋은 예와 잡아낼 때 좋은 예를 정리하는 것에 그 목적을 두고 있다.

본문
예외는 어떻게 발생 시킬 수 있는가?
 예외는 try 구문 내에서 throw a; 형태로 발생 시킬 수 있다. 이 때 a 는 어떠한 타입도 가능하다. 즉, 포인터,기본형, 객체형이 가능하다는 뜻이다.

이렇게 발생된 예외는 어떻게 잡을 수 있는가?
catch 구문을 통해서 잡을 수 있다. 다음과 같이 catch( int a ) 형태 이다. 위의 a가 int 형이라면 잡을 수 있다. 만약 int 형이 아니라면, 잡을 수 없고 try catch 구문 밖으로 예외는 자동으로 나가게 된다.

예)

이처럼 catch문으로 예외를 잡을 수 있다.

왜 책에선 예외를 값의 형태로 발생 시키라고 했는가?
 값이 아닌, 포인터로 전달 할 경우, 전달된 메모리를 어떻게 처리 해야 할지, 관리를 해야 하기 때문에 귀찮아 진다. 그래서 값으로 발생시키라는 것이다.

부득이하게 참조형으로만 발생을 시켜야 한다면, 어떻게 해야 하는가?
 이럴 경우에는 진짜로 참조형으로 밖에 할 수 없는지 다시 한번 생각해 보고, 어쩔수 없다면 boost::shared_ptr 등을 이용하여 객체형으로 만드는 것이 좋다.

이렇게 발생된 예외를 왜 catch(참조형)으로 해야 하는가?
 두가지 큰 이유가 있다. 첫째로는 다형성을 손쉽게 유지 할수 있기 때문이다. 만약 값에 의한 전달이라면, 값이 복사 되면서 splice 문제를 고려 해야 할 것이다. 두번째로는 불필요한 복사를 막을 수 있다. 만약 값에 의한 전달이라면, 매번 예외가 발생 될 때마다 계속 객체를 복사해야 하는 작업도 같이 하게 될 것이다.

결론
 예외를 발생 시킬 때는, 값으로, 잡을 때는 참조로 하는게 일반적으로 좋다.

참고 문헌
C++ Coding Standard 73, Effective C++, Exceptional C++

}

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기