2013-03-08 2 views
-1

저는 C++을 처음 사용하고 다음 문제에 대해 다소 혼란 스럽습니다.DTOR에서 예외가 throw 됨

DTOR이 예외를 throw하면 어떻게됩니까? 개체가 여전히 파괴되고 있습니까?

미리 감사드립니다.

+0

는 또한, 100,500 번 여기에 사용 검색 –

+0

을 논의되었습니다 http://www.parashift.com/c++-faq/dtors-shouldnt-throw.html – Spook

+0

나는 그것을 편집 - 떠나 그 물체가 파괴되고 있는지에 대한 질문 만 – cookya

답변

1

그리고 일반적으로 나쁜 생각입니까?

, 아주 나쁜 것.

소멸자로부터 예외를 던지지 마십시오. 다른 예외가 throw 된 후 예외가 throw 된 후 해당 예외가 catch 처리기에 의해 포착되기 전에 프로그램이 갑자기 종료됩니다.

예외가 throw 될 때 소멸자가 스택 해제 중에 호출되므로 소멸자 중 하나가 다른 예외를 throw하면 소멸자가 즉시 프로그램을 종료합니다. 좋지 않아.

피 소멸자에서 예외를 던지는 (또는 소멸자 외부를을 을 전파하지 않도록 try/catch 블록으로 그들을 포장). 이렇게하면 프로그래밍 연습이 잘못되었습니다. 는 C++ 11 표준의

패러

15.2/3

이 예외가 발생 된 점 try 블록에서 경로 구성된 자동 객체 소멸자를 호출하는 프로세스가

라고 "stack unwinding". 스택 unwinding 중에 호출 된 소멸자가 예외가있는 을 종료하면 std :: terminate가 호출됩니다 (15.5.1). [참고 : 따라서 소멸자는 일반적으로 예외를 잡아서 소멸자 밖으로 전파시키지 않아야합니다. -end 노트]

0

예, bad idea입니다. 안전하게 던질 수 있는지 여부를 결정할 합당한 방법은 없습니다.

관련 문제