본문 바로가기

소프트웨어/C/C++

c/c++] try catch

try{

 

if(i==0)

throw b; //캐치문으로 b를 던져버림

out= 100/i;

}catch(int exception){

cout<<exception<<" 입력됨. 다시입력해주세요"<<endl;

}

 

 

 

 

만약 throw b를했는데 적절한 try catch문이 없다면 프로그램은 stdlib.h의 abort함수를 자동으로 출력한다.(에러창)

그리고 프로그램이 종료된다.

 

 

 

그리고 throw는 int나 char뿐아니라 클래스를 던져버릴수도있다.

예를들어

class exceptClass{

int id;

char* data;

public:

void exceptClass(int _id,char& _data){

data=new char[strlen(_data)+1];

strcpy(data,_data);

id=_id;

}

void what(){

cout<<id<<" "<<data<<endl;

}

}

이런식으로 클래스를만들어서

익셉션발생시

 

throw excptClass(10,"ㅇㅁ");

 

...}catch(excptClass& ex){... //받는쪽. ref로 받는다

 

같이 클래스를 캐치문으로 날려버릴 수 있다.

이점은, 좀더 명확하게 익셉션의 이유를 알 수 있다는 점이다.

그런데 위의 익셉트클래스는 깊은복사가 이루어지고 있다. 꼴랑 익셉션알아볼라고 깊은복사를 하기보다는

그냥 *를 주고받는 간결한 구조가 더 좋다고한다.