Nezpracované výjimky jazyka C++
Nelze-li v aktuální výjimce najít odpovídající obslužnou rutinu (nebo rutinu catch se třemi tečkami), je zavolána předdefinovaná funkce modulu run-time terminate. (V libovolné obslužné rutině lze funkci terminate zavolat také explicitně.) Výchozí akcí funkce terminate je zavolání funkce abort.Chcete-li, aby funkce terminate zavolala před ukončením aplikace jinou funkci v programu, zavolejte funkci set_terminate, v jejímž jediném argumentu bude název funkce, která má být zavolána.Funkci set_terminate lze zavolat kdekoli v programu.Rutina terminate vždy volá poslední funkci, která byla předána jako argument funkci set_terminate.
Příklad
Následující příklad vyvolá výjimku typu char *, ale neobsahuje obslužnou rutinu určenou k zachytávání výjimek typu char *.Volání funkce set_terminate dává pokyn, aby funkce terminate zavolala funkci term_func.
// exceptions_Unhandled_Exceptions.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
void term_func() {
cout << "term_func was called by terminate." << endl;
exit( -1 );
}
int main() {
try
{
set_terminate( term_func );
throw "Out of memory!"; // No catch handler for this exception
}
catch( int )
{
cout << "Integer exception raised." << endl;
}
return 0;
}
Výsledek
term_func was called by terminate.
Funkce term_func by měla ukončit program nebo aktuální vlákno, ideálně zavoláním funkce exit.Pokud k tomu nedojde a namísto toho přejde funkce zpět na volající funkci, je zavolána funkce abort.