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.