Wyjątki w obiektach globalnych

Kontynuujemy zabawy z wyjątkami ;)

A co powiecie na zgłaszanie sytuacji wyjątkowych w konstruktorze globalnego obiektu?

Co się stanie, gdy konstruktor rzuci wyjątkiem przed wejściem do funkcji main?

Poleci zapewne terminate().

Jak zasygnalizować zaistniałą sytuację i „odwieść” program od wywołania terminate()?

Obsłużyć wyjątek rzecz jasna ;)

Jak przechwycić wyjątek z globalnych obiektów?

Sprawa trochę skomplikowana, bo jak wiemy obiekty globalne są tworzone przed wejściem do funkcji main. Tak, aby były gotowe do użycia, gdy się rozpocznie program (funkcja main). Nie mamy możliwości dostania się do tego kodu i objęcia go choćby w try-catch, więc co możemy zrobić?

Jest jeden sposób!
Jest pewien prosty trick. Kolega Maciej Sobczak zamieścił na usenecie rozwiązanie tego problemu. Trick nosi nazwę „globalne try Sobczaka” (nie znalazłem nigdzie podobnej publikacji ;)).

Jego działanie jest proste, Jest to prosty wrapper na docelowy obiekt i w nim obsługujemy nasz wyjątek, szczegóły w poście autora na pl.comp.lang.c.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *