@Relja: Pazi, izuzetke iz "tuđeg" koda u principu ne možeš da izbegneš nikako. Ako operator new ne može da alocira memoriju on će da baci izuzetak std::bad_alloc. Drugi primer, u slučaju da se desi access violation, Windows će da baci SEH, koji može da se uhvati sa catch(...) ili da se mapira na neki drugi izuzetak. Ako koristiš recimo DTL za pristup bazama podataka, dobićeš izuzetak kad god neka operacija sa bazom ne uspe. Jednostavno, izuzeci su legitiman deo C++a i treba znati kako da se radi sa njima, a ne "izbegavati ih".
@rivan: Ne znam u kom kontekstu je dat taj kod, ali to je školski primer kako ne treba raditi u konstruktoru. U slučaju izuzetka dobićeš loše inicijalizovan objekat a nećeš znati, pa ćeš ga koristiti kao da je lepo inicijalizovan i nastradaćeš. Pusti izuzetak da ode iz konstruktora i koristi try-catch kad kreiraš nov objekat te klase.
Destruktori su potpuno suprotan primer. Ne treba pustiti izuzetak da napusti destruktor ni po koju cenu.
@Leka: Ja sam odavno primetio da si ti u duši C programer. Da me ne shvatiš pogrešno, nema ničeg lošeg u tome i potpuno je legitimno koristiti C++ kao "bolji C", ali grešiš kada kažeš da su "sirovi" pointeri bitno obeležje C++a. Najvažnija osobina C++a je da sam biraš nivoe apstrakcije koje želiš da koristiš i da plaćaš samo za ono što zaista i koristiš. Siguran sam da u najvećem broju slučajeva nema racionalnog razloga za manuelno oslobađanje resursa, a u kodu koji koristi izuzetke je praktično nemoguće izbeći razna "curenja" (memorije i drugih resursa) ako ne koristiš "pametne omotače" umesto pointera i dugih handleova.
Da rekapituliram. Moguće je praviti ispravan kod ako:
1) Manuelno oslobađate resurse ali ne koristite izuzetke (teži način)
2) Automatski oslobađate resurse i koristite (ili ne) izuzetke (lakši način).