Udostępnij za pośrednictwem


Wyjątki: Połowu i usuwanie wyjątków

Następujące instrukcje i przykłady przedstawiają metody połowu i Usuń wyjątki.Aby uzyskać więcej informacji na Spróbuj, połowu, i throw słowa kluczowe, zobacz Obsługi wyjątków C++.

Twoje procedur obsługi wyjątków należy usunąć wyjątek obiekty, które obsługują, ponieważ brak, aby usunąć wyjątek powoduje przeciek pamięci w każdym przypadku, gdy wyjątek zostanie przechwycony tego kodu.

Twój połowu blok musi usunąć wyjątek podczas:

  • Połowu bloku wygeneruje nowy wyjątek.

    Oczywiście nie należy usunąć wyjątek, jeśli throw ponownie ten sam wyjątek:

    catch(CException* e)
    {
       if (m_bThrowExceptionAgain)
          throw; // Do not delete e
       else 
          e->Delete();
    }
    
  • Zwraca wykonanie z poziomu połowu bloku.

[!UWAGA]

Podczas usuwania CException, użyj usunąć Członkowskich funkcji, aby usunąć wyjątek.Nie należy używać usunąć słowa kluczowego, ponieważ może nie, jeśli wyjątek nie znajduje się na stercie.

Do połowu i usunąć wyjątków

  • Użyj Spróbuj słowo kluczowe, aby skonfigurować Spróbuj bloku.Wykonanie instrukcji dowolnego programu, które może zgłosić wyjątek w Spróbuj bloku.

    Użyj połowu słowo kluczowe, aby skonfigurować połowu bloku.Umieść kod obsługi wyjątków w połowu bloku.Kod w połowu bloku jest wykonywane tylko wtedy, gdy kod w Spróbuj bloku zgłasza wyjątek typu określonego w połowu instrukcji.

    Szkielet poniższym jak Spróbuj i połowu bloki są zwykle uporządkowane:

    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();
    }
    

    Gdy wyjątek jest generowany, kontroli przechodzi do pierwszej połowu blok, w których zgłoszenie wyjątku pasuje do typu wyjątku.Można selektywnie obsługi różnych typów wyjątków z kolejne połowu blokuje wymienione poniżej:

    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();
    }
    

Aby uzyskać więcej informacji, zobacz wyjątki: konwersja z makr wyjątek MFC.

Zobacz też

Koncepcje

Obsługa wyjątków w MFC