Sdílet prostřednictvím


Výjimky: Zachytávání a mazání

Následující pokyny a příklady ukazují, jak zachytit a odstranit výjimky. Další informaceoch trycatchthrow

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 CExceptionpomocí 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

  1. try K nastavení try bloku použijte klíčové slovo. Spusťte všechny příkazy programu, které můžou vyvolat výjimku v try rámci bloku.

    catch K nastavení catch bloku použijte klíčové slovo. Umístěte kód zpracování výjimek do catch bloku. Kód v catch bloku se spustí pouze v případě, že kód v try bloku vyvolá výjimku typu zadaného catch v příkazu.

    Následující kostra ukazuje, jak try a catch 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ími catch 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.

Viz také

Zpracování výjimek