2015-02-05 3 views
0

나는 C++로 예외 사항을 배우기 시작했다. "stack unwinding"이라는 용어는 예외적으로 던져 질 때마다 "throwing function"안에 catch 블록이 없으므로 함수 스택이 "unwind"되고이 모든 로컬 객체의 (그리고 적절한 catch 블록이 발생할 때까지 외부 함수에서도 발생합니다).예외로 풀려 나가는 스택 C++

내 질문 :

이 가 디부 토르는 try 블록 내부에 정의 된 모든 객체에 대해 호출 될 것입니다 예외가 적합 다음 캐치와 try 블록 내부에 던져졌다 생각? 또는 예외가 발생할 때까지 try 블록에 정의 된 모든 객체에? 또는 전혀 객체에 접근하지 않고 함수가 종료 될 때까지 기다릴 것입니까?

답변

2

의미는 블록에서 선언 된 모든 로컬 변수는 컨트롤이 블록을 벗어날 때 파괴되어야한다는 것입니다 (함수는 로컬 변수 인 매개 변수가있는 명명 된 블록 임). 따라서 try-block을 남겨두면 로컬로 생성 된 변수가 삭제되고 적절한 dtor가 호출됩니다. 창조 된 모든 것은 파괴되고, 무언가가 창조되지 않으면 단순히 파괴 될 수 없습니다. 파괴되지 않는 유일한 것은 obj 자체가 던져지면 예외 객체입니다. 는 C에서

++ 규격 :

15.2 생성자 및 대조군으로서 1 예외가 처리기에 발생되는 지점에서 전달 소멸자, 소멸자는 모두 자동 개체 호출은 이후 건설 try 블록이 입력되었습니다. 자동 객체 자동 객체 소멸자의 호출 프로세스는 포인트 try 블록에서 경로 를 구성 3. 그들의 구조

15.2 생성자의 완료와 소멸자의 역순 파괴되는 경우 예외가 발생하면 을 "스택 풀기"라고합니다.