Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Poniższe instrukcje i przykłady pokazują, jak przechwytywać i usuwać wyjątki. Aby uzyskać więcej informacji na trytemat słów kluczowych , catchi throw , zobacz Nowoczesne najlepsze rozwiązania języka C++ dotyczące wyjątków i obsługi błędów.
Programy obsługi wyjątków muszą usuwać obsługiwane przez nie obiekty wyjątków, ponieważ błąd usunięcia wyjątku powoduje przeciek pamięci za każdym razem, gdy kod przechwytuje wyjątek.
Blok catch musi usunąć wyjątek, gdy:
Blok
catchzgłasza nowy wyjątek.Oczywiście nie można usunąć wyjątku, jeśli ponownie zgłosisz ten sam wyjątek:
catch (CException* e) { if (m_bThrowExceptionAgain) throw; // Do not delete e else e->Delete(); }Wykonanie jest zwracane z bloku
catch.
Uwaga / Notatka
Podczas usuwania CException, użyj funkcji składowej Delete, aby usunąć wyjątek. Nie używaj słowa kluczowego delete, ponieważ może wystąpić problem, jeśli wyjątek nie znajduje się na stercie.
Aby przechwycić i usunąć wyjątki
Użyj słowa kluczowego
try, aby skonfigurować bloktry. Wykonaj jakiekolwiek instrukcje programu, które mogą zgłaszać wyjątek w blokutry.Użyj słowa kluczowego
catch, aby skonfigurować blokcatch. Umieść kod obsługi wyjątków wcatchbloku. Kod wcatchbloku jest wykonywany tylko wtedy, gdy kod wtrybloku zgłasza wyjątek typu określonego w instrukcjicatch.Poniższy szkielet pokazuje, jak
tryicatchbloki są zwykle rozmieszczone: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 zgłaszany jest wyjątek, kontrolka przechodzi do pierwszego
catchbloku, którego deklaracja wyjątku jest zgodna z typem wyjątku. Można selektywnie obsługiwać różne typy wyjątków z blokami sekwencyjnymicatch, jak pokazano 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 makr wyjątków MFC.