Sdílet prostřednictvím


Výjimky: Zachycení a odstranění výjimky

Následující pokyny a příklady ukazují, jak zjistit a odstranit výjimky.Další informace o akci, úlovku, a throw klíčová slova, viz Zpracování výjimek C++.

V popisovačích výjimek musíte odstranit výjimku objekty, které mohou zpracovat, protože selhání odstranit výjimku způsobuje nevracení paměti při každém kód výjimku zachytí.

Vaše úlovku blok, musíte odstranit výjimku při:

  • Úlovku bloku novou výjimku.

    Pokud vyvolávají stejné výjimku znovu samozřejmě třeba odstranit není výjimka:

    catch(CException* e)
    {
       if (m_bThrowExceptionAgain)
          throw; // Do not delete e
       else 
          e->Delete();
    }
    
  • Spuštění vrací v rámci úlovku bloku.

[!POZNÁMKA]

Při odstraňování CException, použít Odstranit členské funkce odstranit výjimku.Nepoužívejte Odstranit klíčové slovo, protože může selhat, pokud není výjimkou na haldy.

Zachycení a odstranění výjimky

  • Použití akci klíčového slova pro nastavení akci bloku.Spustit libovolný program příkazy, které může vyvolat výjimku v akci bloku.

    Použití úlovku klíčového slova pro nastavení úlovku bloku.Umístit kód zpracování výjimek v úlovku bloku.Kód v úlovku bloku je spouštěn pouze v případě kódu v akci bloku výjimku typu určeného v úlovku prohlášení.

    Následující obalu s kostlivcem jak akci a úlovku 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();
    }
    

    Když je vyvolána výjimka, řízení předá první úlovku blok, jehož výjimku prohlášení odpovídá typu výjimky.Selektivně lze zpracovávat různé typy výjimky pro sekvenční úlovku blokuje níže uvedené:

    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 výjimky: převod z makra MFC výjimku.

Viz také

Koncepty

Zpracování výjimek v MFC