1. catch (...)를 사용하지 마십시오.
int main()
{
try
{
int da = 0;
int data = 1 / da;
}
catch (const std::exception& e)
{
std::cout << "error:" << e.what() << std::endl;
}
std::cout << "finish" << std::endl;
while (1);
return 0;
}
작업 결과는 다음과 같습니다.
예외를 포착하지 못했습니다. 프로그램이 충돌하고 종료되었습니다.
2. catch (...) 추가
int main()
{
try
{
int da = 0;
int data = 1 / da;
}
catch (const std::exception& e)
{
std::cout << "error:" << e.what() << std::endl;
}
catch (...)
{
std::cout << "error unknown" << std::endl;
}
std::cout << "finish" << std::endl;
while (1);
return 0;
}
작업 결과는 다음과 같습니다.
예외 캡처가 성공하고 프로그램이 종료하지 않고 정상적으로 실행됩니다.
3. Catch (...)를 사용하지만 throw가 추가되었습니다.
int main()
{
try
{
int da = 0;
int data = 1 / da;
}
catch (const std::exception& e)
{
std::cout << "error:" << e.what() << std::endl;
}
catch (...)
{
std::cout << "unkonwo" << std::endl;
throw;
}
std::cout << "finish" << std::endl;
while (1);
return 0;
}
작업의 결과는 다음과 같습니다.
프로그램이 catch (...)에 걸리지 만 예외가 throw 된 후에도 계속 throw되어 결국 프로그램이 계속 충돌합니다.
요약 : 오류가 발생한 후 프로그램이 다양한 예외를 포착하지 못하도록하여 프로그램이 충돌없이 정상적으로 실행될 수 있도록하려면 catch (...)를 추가하고 다시 포착하는 것이 가장 좋습니다. 프로그램이 충돌없이 계속 실행되도록하려면 catch에 throw를 추가하여 예외를 다시 throw하지 마십시오.