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
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro