Wyjątki w obiektach globalnych

24 października 2008

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.

Podobne notatki:

Może zainteresują Cię również następujące, pododbne notatki:

Nikt jeszcze nie skomentował tego wpisu.
Możesz być pierwszy.

Dodaj swój komentarz

Możesz użyć tych tagów XHTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Jeśli chcesz wstawić kilku linijkowy fragment kodu, użyj tagów <pre lang="x"></pre> (gdzie x język kodu np. cpp, perl, html). W ten sposób kod zostanie odpowiednio sformatowany i pokolorowany przez system.

Uwaga!

Na tym blogu działa system cache oraz filtr antyspamowy. Twój komentarz może być widoczny na stronie z pewnym opóźnieniem. Proszę o cierpliwość. Jeśli utraciłeś już wszystkie jej zasoby poinformuj mnie o tym, być może system uznał Cię za spamera ;)