Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Následující pokyny a příklady ukazují, jak zachytit a odstranit výjimky. Další informace o klíčových slovech try, catch a throw naleznete v dokumentu Moderní postupy C++ pro výjimky a zpracování chyb.
Vaše obslužné rutiny výjimek musí odstranit objekty výjimek, které zpracovávají, protože neodstranění výjimky způsobí únik paměti pokaždé, když kód zachytí výjimku.
Blok catch musí odstranit výjimku, pokud:
Blok
catchvyvolá 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í ze
catchbloku.
Poznámka:
Při odstraňování CException použijte členskou funkci Delete k odstranění výjimky.
delete Nepoužívejte klíčové slovo, protože může selhat, pokud výjimka není v haldě.
Zachycení a odstranění výjimek
tryK nastavenítrybloku použijte klíčové slovo. Spusťte všechny příkazy programu, které můžou vyvolat výjimku vtryrámci bloku.catchK nastavenícatchbloku použijte klíčové slovo. Umístěte kód zpracování výjimek docatchbloku. Kód vcatchbloku se spustí pouze v případě, že kód vtrybloku vyvolá výjimku typu zadanéhocatchv příkazu.Následující kostra ukazuje, jak
tryacatchbloky 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
catchbloku, jehož deklarace výjimky odpovídá typu výjimky. Selektivně můžete zpracovávat různé typy výjimek se sekvenčnímicatchbloky, 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.