Sdílet prostřednictvím


Neošetřené výjimky jazyka C++

Pokud pro aktuální výjimku nelze najít odpovídající obslužnou rutinu (nebo tři tečky catch ), volá se předdefinovaná terminate funkce za běhu. (Můžete také explicitně volat terminate v libovolném z vašich obslužných rutin.) Výchozí akcí terminate je volání abort. Chcete-li, aby funkce terminate vyvolala před ukončením aplikace jinou funkci v programu, vyvolejte funkci set_terminate, v jejímž jediném argumentu bude název funkce, která má být vyvolána. Funkci set_terminate lze vyvolat kdekoli v programu. Rutina terminate vždy volá poslední funkci danou jako argument .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 vyvolala 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ýstup

term_func was called by terminate.

Funkce term_func by měla ukončit program nebo aktuální vlákno, ideálně vyvoláním funkce exit. Pokud k tomu nedojde a místo toho přejde funkce zpět na volající funkci, je vyvolána funkce abort.

Viz také

Moderní osvědčené postupy jazyka C++ pro výjimky a zpracování chyb