Warto też zayważyć, że rzucanie wyjątkiem z destruktorow jest wysoce niewskazane.
Dopowiadając, wyjątki o których mówi sapero i świętowit (jak ów już zauważył) tylko przypadkiem się nazywają wyjątkami. Nazwijmy je BLE.
BLE nie pochodzi z C++, cpp nie ma o nim pojęcia. Z punktu widzenia C++, desktruktory nigdy nie rzucaja wyjątkami, chyba ze programista jadac maluchem za mocno w dach głową przygrzmocił, albo -- wrecz przeciwnie, ma genialny master plan, a wszystko jest dokladnie zabezpieczone, doszlifowane i pasy mocno zapięte.. *)
BLE pochodzi z systemu operacyjnego klasy np. Windows i jest mechanizmem podobnym do wyjatkow, dzieki ktoremu system potrafi Ci dac znac ze cos tragicznie nie wyszlo. Nie, ze jakis tam iostream jest w zlym stanie, czy ze format napisu sie nie zgadza. Cos naprawde tragicznego - np. uszkodzenie pamieci, uszkodzenie stosu, jakis dziwny nieznany kod instrukcji maszynowej itd.
Mechanizm ten jest w miare wygodny i tak podobny do wyjatkow w obsludze, ze sie go wrecz nazywa wyjatkami, a do jego obslugi stosuje __try __except. Ale C++ try/catch go nie zlapią i C++owe mechanizmy go nie wykryja. Przeleci przez nie tak samo jak wyjatek C++ przez kod jezyka C. Bo nie jest wyjątek -- to jest "wyjątek ustrukturyzowany", BLE nazywa sie SEH: http://msdn.microsoft.com/en-us/library/ms680657(VS.85).aspx
*) dlatego, że: http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.13 i podążaj dalej po linku 'beware' do sekcji 17.XX. Jak to przeczytasz, to pewnie zrozumiesz, czemu można, ale nie należy rzucac z dtor'ow