문제

초기화의 예외가 발생할 수 있다고 생각합니다.그래서 우리는 시도 / 잡기 블록을 씁니다.

int f(){
    throw 1;
}

class A
{
public:
    A() try : _k(f())
    {}
    catch (int)
    {
        std::cout << "Exception 1" << std::endl;
    }

private:
    int _k;
};
.

그러나 Catch Rethrows 예외는 한 수준의 더 깊게 예외입니다.이는 다음 코드

을 의미합니다
try
{
    A a;
} catch(int)
{
    std::cout << "Exception 2" << std::endl;
}
.

출력 :

Exception 1
Exception 2
.

이 시도 / 캐치 블록이 일반 시도 / 캐치 블록과 같은 방식으로 작동하지 않는 이유는 무엇입니까?

전체 코드 예 : http://ideone.com/xjy2d

도움이 되었습니까?

해결책

귀하의 질문은 다음과 같습니다. 왜 기능 수준 시도 / 캐치가 자동으로 exceptoin을 다시 읽는가?물체의 구성에서 예외를 던지면이 물체는 인생에 관해서는 죽은 것으로 간주됩니다.모든 하위 튜브가 파괴됩니다.즉, 건설 중에 예외가 발생하면 물체가 없습니다.예외가 던지지 않으면 객체의 선체를 손에 넣습니다.이것은 분명히 바람직하지 않습니다.

다른 팁

생성중인 객체가 실제로 구성되지 않았으므로 간단한 반환이 옵션이 아닙니다.이러한 종류의 Try0-catch 항상 Rethrows (catch 절에서 자신의 예외를 버리지 않는 한)

일반적인 시도 캐치 블록이 아니라 기능 수준 / catch가 아니기 때문입니다.throw를 사용하여 명시 적으로 수행하지 않는 한 자동으로 자동으로 Rethrows입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top