Výjimky: Zachytávání a mazání
Následující pokyny a příklady ukazují, jak zachytit a odstranit výjimky. Další informaceoch try
catch
throw
Obslužné rutiny výjimek musí odstranit objekty výjimek, které zpracovávají, protože při každém zachytnutí výjimky dojde k selhání odstranění výjimky, protože při každém zachytnutí kódu dojde k nevrácení paměti.
Blok catch
musí odstranit výjimku, pokud:
Blok
catch
vyvolá novou výjimku.Pokud vyvoláte stejnou výjimku znovu, nesmíte samozřejmě odstranit tuto výjimku:
catch (CException* e) { if (m_bThrowExceptionAgain) throw; // Do not delete e else e->Delete(); }
Provádění se vrátí z
catch
bloku.
Poznámka
Při odstraňování výjimky CException
pomocí Delete
členské funkce odstraňte výjimku. delete
Nepoužívejte klíčové slovo, protože může selhat, pokud výjimka není v haldě.
Zachycení a odstranění výjimek
try
K nastavenítry
bloku použijte klíčové slovo. Spusťte všechny příkazy programu, které můžou vyvolat výjimku vtry
rámci bloku.catch
K nastavenícatch
bloku použijte klíčové slovo. Umístěte kód zpracování výjimek docatch
bloku. Kód vcatch
bloku se spustí pouze v případě, že kód vtry
bloku vyvolá výjimku typu zadanéhocatch
v příkazu.Následující kostra ukazuje, jak
try
acatch
bloky jsou obvykle uspořádány:try { // Execute some code that might throw an exception. AfxThrowUserException(); } catch (CException* e) { // Handle the exception here. // "e" contains information about the exception. e->Delete(); }
Při vyvolání výjimky se ovládací prvek předá prvnímu
catch
bloku, jehož deklarace výjimky odpovídá typu výjimky. Selektivně můžete zpracovávat různé typy výjimek se sekvenčnímicatch
bloky, jak je uvedeno níže:try { // Execute some code that might throw an exception. AfxThrowUserException(); } catch (CMemoryException* e) { // Handle the out-of-memory exception here. e->Delete(); } catch (CFileException* e) { // Handle the file exceptions here. e->Delete(); } catch (CException* e) { // Handle all other types of exceptions here. e->Delete(); }
Další informace naleznete v tématu Výjimky: Převod z maker výjimek MFC.