Ostrożnie z catch(...)

Klauzula

catch(...)
{
}

(złapanie dowolnego wyjątku) łapie niekiedy dużo więcej, niż w najśmielszych marzeniach moglibyśmy się spodziewać. Na przykład w większości znanych mi kompilatorów łapie ... gwałty pamięci.

Zalety wynikające z tego są niewielkie (program, który zaczął gwałcić pamięć będzie ją pewnie gwałcił już na okrągło), za to tracimy informację co się stało, którą zaprezentowałoby nam odpowiednie okno, zrzut stosu czy plik core.

Dlatego lepiej nie łapać trzech kropek, zamiast tego wyłapując w jakimś centralnym punkcie programu 'korzenie' wykorzystywanych hierarchii wyjątków (na pewno std::exception, niekiedy także korzeń jakiejś naszej hierarchii czy hierarchii definiowanej przez używaną przez nas bibliotekę).

komentarze obsługiwane przez Disqus