Udostępnij za pośrednictwem


Wyjątki: przechwytywanie 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 temat Spróbuj, połowu, i throw słów kluczowych, zobacz Obsługi wyjątków C++.

Twój procedur obsługi wyjątków należy usunąć wyjątek obiekty, które realizują, ponieważ nie powiodło się usunięcie wyjątek powoduje przeciek pamięci, gdy wyjątek zostanie przechwycony w tym kodzie.

Twój połowu bloku należy usunąć wyjątek podczas:

  • Połowu bloku rzuca nowych wyjątków.

    Oczywiście nie można usunąć wyjątek Jeśli rzucić tego samego wyjątku:

    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ąć funkcji składowej usunąć wyjątek.Nie należy używać usunąć słowo kluczowe, ponieważ to może się nie powieść Jeśli wyjątek ten nie ma na stercie.

Do połowu i Usuń wyjątki

  • Użycie Spróbuj słowo kluczowe, aby skonfigurować Spróbuj bloku.Wykonaj wszelkie instrukcje programu, które może zgłosić wyjątek w Spróbuj bloku.

    Użycie 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 wykonywana tylko wtedy, gdy kod w Spróbuj bloku zgłasza wyjątek typu określonego w połowu instrukcji.

    Szkielet ilustruje poniższy jak Spróbuj i połowu rozmieszczone są normalnie bloki:

    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, kontrola przechodzi do pierwszego połowu blok, w której oświadczenie wyjątek jest zgodny z typem wyjątku.Można selektywnie obsługi różnych typów wyjątków z kolejnych 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: konwertowanie z makra wyjątek MFC.

Zobacz też

Koncepcje

Obsługa wyjątków w MFC