C++에서 예외를 가지고 놀았을 때, 나는 여기서 누군가가 설명 할 수 있기를 바랬던 흥미로운 행동을 알아 차렸다. 아래 코드를 살펴보십시오.예외 예외 발생
class Foo
{
public:
Foo()
{
throw 0;
}
};
class RandomException
{
public:
Foo f;
};
void bar()
{
throw RandomException();
}
// Case #1
int main()
{
bar();
return 0;
}
위의 경우 처리되지 않은 예외가 있습니다. 나는에 main
함수의 본문을 변경하면 현재 :
// Case #2
int main()
{
try
{
bar();
}
catch (int)
{
}
return 0;
}
나는 예외를 삼키는거야. 처리되지 않은 예외는 없으며 코드가 제대로 실행됩니다. 코드를 다음과 같이 변경하면
// Case #3
int main()
{
try
{
bar();
}
catch (RandomException&)
{
}
return 0;
}
다시 처리되지 않은 예외가 발생합니다.
케이스 2의 경우 처리되지 않은 예외가없는 이유를 알고 싶습니다. 케이스 # 3에서는 두 가지 예외가 있습니다. 하나는 int
이고 다른 하나는 RandomException
입니다.
예외를 throw하는 동안 예외가 throw 될 때 C++이 어떻게 처리합니까? 여기
왜 맞춤 예외 클래스의 _inside_ 예외가 발생합니까? 그건 미친 짓이야. RandomException의 생성자는 throw되는 Foo의 생성자를 호출하고 case 3이 아닌 case 2에서만 해당 예외를 catch합니다. – stefan
[The Daily WTF] (http://thedailywtf.com/Articles/Crashception.aspx) . 8v) –
@stefan 물론 과학을 위해서. 왜 또? – Zeenobit