const int MIN_NUMBER = 4;
class Temp
{
public:
Temp(int x) : X(x)
{
}
bool getX() const
{
try
{
if( X < MIN_NUMBER)
{
//By mistake throwing any specific exception was missed out
//Program terminated here
throw ;
}
}
catch (bool bTemp)
{
cout<<"catch(bool) exception";
}
catch(...)
{
cout<<"catch... exception";
}
return X;
}
private:
int X;
};
int main(int argc, char* argv[])
{
Temp *pTemp = NULL;
try
{
pTemp = new Temp(3);
int nX = pTemp->getX();
delete pTemp;
}
catch(...)
{
cout<<"cought exception";
}
cout<<"success";
return 0;
}
В приведенном выше коде throw false использовался метод getX(), но из-за человеческой ошибки (!) false был пропущен. Невинно выглядящий код разбил приложение.
Мой вопрос: почему программа заканчивается, когда мы бросаем "ничего"?
У меня мало понимания того, что throw;
- это в основном "rethrow" и должен использоваться в обработчике исключений (catch). Использование этой концепции в любом другом месте приведет к расторжению программы, то почему компилятор не создает флаги во время компиляции?