1. 메모리 할당을 위한 new가 실패하였을때 nothrow 버전의 new를 사용하는 경우를 제외하고는 무조건 bad_alloc 예외
클래스를 던진다.
2. dynamic_cast -> bad_cast
3. typeid -> bad_typeid
4. 예기치않는예외 -> bad_exception
5. c++ 표준 라이브러리를 지원하기 위한 예외들
a) 유효하지 않은 인자에 의해 발생되는 에러를 위한 invaild_argument 예외 클래스
ex) bitset(비트 배열)을 0,1이 아닌 문자로 초기화했을 경우
b) 최대 허용 사이즈를 넘어가는 어떤 작업을 시도할 경우 발생되는 에러를 위한 length_error예외 클래스
ex) 스트링에 너무 많은 문자를 추가할 경우
c) 인자값이 유효한 범위를 벗어나는 경우 발생되는 에러를 위한 out_of_range 예외 클래스
ex)배열과 같은 컬렉션이나 스트링에 잘못된 인덱스가 사용될 경우
d) 도메인 에러를 위한 domain_error 예외 클래스
6. 프로그램의 범위를 벗어나는 에러를 지원하기 위한 예외들
a) 내부적인 계산중 발생하는 범위 에러를 알리기 위한 range_error 예외 클래스
b) 산술 오버플로우를 알려주기 위한 overflow_error 예외 클래스
c) 산술 언더플로우를 알려주기 위한 underflow_error 예외 클래스
7. 기본 exception클래스와 bad_exception 클래스는 <exception>에 정의
bad_alloc 클래스는 <new>에 정의
bad_cast와 bad_typeid클래스는 <typeinfo>에 정의
ios_base::failure 클래스는 <ios>에 정의
나머지 떨거지 클래스들은 <stdexcept>에 정의
8. 예외 클래스 멤버함수로써 what()
-> try {
...
}catch(const std::exception& error){
std::error << error.what() << std::endl;
}
9. 사용자 정의 예외 클래스
class Myproblem : public std::exception {
public :
Myproblem(...){}
virtual const char * what() const throw(){ //what함수
..}
};