Sdílet prostřednictvím


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

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

Vaše obslužné rutiny výjimek nutné odstranit objekty výjimek, které zpracovávají, protože se nepodařilo odstranit výjimku způsobuje nevracení paměti vždy, když tento kód výjimku zachytí.

Vaše ve skutečné blok musí odstranit výjimku při:

  • Ve skutečné blok novou výjimku.

    Samozřejmě nesmí odstranit výjimku, pokud vyvolat výjimku znovu:

    catch(CException* e)
    {
       if (m_bThrowExceptionAgain)
          throw; // Do not delete e 
       else 
          e->Delete();
    }
    
  • Spuštění vrátí ze ve skutečné blok.

[!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 výjimka není na haldě.

K zachycení a odstranění výjimky

  • Použití akci klíčové slovo pro nastavení akci blok.Spustit jakýkoli program příkazy, které může vyvolat výjimku v rámci akci blok.

    Použití skutečné klíčové slovo pro nastavení ve skutečné blok.Umístit kód zpracování výjimek ve skutečné blok.Kód v skutečné bloku se spustí pouze tehdy, pokud kód v rámci akci blok výjimku typu určeného v skutečné prohlášení.

    Následující kostry ukazuje jak akci a skutečné 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, ovládací prvek předá první ve skutečné blok, jehož prohlášení výjimka odpovídá typu výjimky.Můžete selektivně zpracovávat různé typy výjimek s sekvenční ve skutečné blokuje, 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 výjimky maker knihovny MFC.

Viz také

Koncepty

Zpracování výjimek v prostředí MFC