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.