Ho il seguente codice C++ e mi da una sorpresa. Il problema è che se lancio qualcosa tranne il re-throw all'interno del blocco catch, il programma verrà terminato chiamando abort e darà il messaggio di errore in GCC4, "terminato chiamato dopo aver lanciato un'istanza di 'int'". Se uso solo "lancia"; per rilanciare dentro il blocco catch, tutto andrà bene.perché causa la chiusura se provo a lanciare qualcosa all'interno di un blocco catch in C++
#include <iostream>
#include <exception>
#include <stdexcept>
using namespace std;
int main()
{
try{
throw std::string("first throw");
}
catch(std::string &x){
try{
std::cout << x << std::endl;
// throw; // if I use this line, all is fine.
throw int(2); // but if I use this line, it causes Abort() to be called
}
catch (int &k){
throw;
}
catch(...)
{
cout << "all handled here!"<< endl;
}
}
catch(...){
std::cout<< "never printed" << endl;
}
}
Se si butta fuori da una presa, questo è normale. – AJG85