Obsługa wyjątków w C ++ jest ograniczona do try / throw / catch. W przeciwieństwie do Object Pascal, Java, C # i Python, nawet w C ++ 11 finally
konstrukcja nie została zaimplementowana.
Widziałem okropnie dużo literatury C ++ omawiającej „bezpieczny kod wyjątku”. Lippman pisze, że bezpieczny kod wyjątku jest ważnym, ale zaawansowanym, trudnym tematem, wykraczającym poza zakres jego Primer - co wydaje się sugerować, że bezpieczny kod nie jest fundamentalny dla C ++. Herb Sutter poświęca temu tematowi 10 rozdziałów w swoim wyjątkowym C ++!
Wydaje mi się jednak, że wiele problemów napotkanych podczas próby napisania „kodu bezpiecznego wyjątku” można by całkiem dobrze rozwiązać, gdyby finally
konstrukcja została zaimplementowana, co pozwala programiście zapewnić, że nawet w przypadku wyjątku program będzie można przywrócić do bezpiecznego, stabilnego i szczelnego stanu, blisko punktu alokacji zasobów i potencjalnie problematycznego kodu. Jako bardzo doświadczony programista Delphi i C # używam try .. wreszcie dość obszernie blokuje mój kod, podobnie jak większość programistów w tych językach.
Biorąc pod uwagę wszystkie „dzwonki i gwizdki” zaimplementowane w C ++ 11, zdziwiłem się, widząc, że „w końcu” nadal tam nie było.
Dlaczego więc finally
konstrukcja nigdy nie została zaimplementowana w C ++? To naprawdę nie jest bardzo trudna ani zaawansowana koncepcja do zrozumienia i bardzo pomaga w pisaniu „wyjątkowego bezpiecznego kodu”.
finally
C ++ i jakie techniki obsługi wyjątków są stosowane zamiast niego?” jest ważny i dotyczy tematu tej witryny. Myślę, że istniejące odpowiedzi obejmują to dobrze. Zmieniając to w dyskusję na temat: „Czy powody, dla których projektanci C ++ nie uwzględnili finally
wartości, są warte?” i „Czy finally
należy dodać do C ++?” i prowadzenie dyskusji na temat komentarzy do pytania, a każda odpowiedź nie pasuje do modelu tej witryny pytań i odpowiedzi.