Я написал следующую программу
#include <iostream>
#include <stdexcept>
class Myclass
{
public:
~Myclass()
{
//throw std::runtime_error("second (in destructor)");
throw 1;
}
};
void fun()
{
Myclass obj;
}
int main()
{
try
{
fun();
}
catch (const std::exception& e)
{
std::cout << e.what();
}
catch(...)
{
std::cout << " ... default Catch" << std::endl;
}
std::cout << "Normal" << std::endl;
return 0;
}
Когда я запускаю вышеуказанную программу в режиме C++98
(cpp.sh), она печатает
... default Catch
Normal
Когда я запускаю его в режиме C++14
, он ничего не печатает. Почему это поведение изменилось?
Я понимаю, что всякий раз, когда возникает какое-либо исключение и любое destructor
(в процессе раскручивания стека) выдает любое исключение, оно завершает работу приложения. Но здесь только один раз выбрасывается исключение из блока try
, то есть из блока destructor
.