Le eccezioni
Durante l'esecuzione di un applicativo possono verificarsi delle situazioni
di errore non verificabili a compile-time, che in qualche modo vanno gestiti.
Le possibili tipologie di errori sono diverse ed in generale non tutte trattabili
allo stesso modo. In particolare possiamo distinguere tra errori che non compromettono
il funzionamento del programma ed errori che invece costituiscono una grave
impedimento al normale svolgimento delle operazioni.
Tipico della prima categoria sono ad esempio gli errori dovuti a errato input
dell'utente, facili da gestire senza grossi problemi. Meno facili da catturare
e gestire e` invece la seconda categoria cui possiamo inserire ad esempio i
fallimenti relativi all'acquisizione di risorse come la memoria dinamica; questo
genere di errori viene solitamente indicato con il termine di eccezioni
per sottolineare la loro caratteristica di essere eventi particolarmente rari
e di comportare il fallimento di tutta una sequenza di operazioni.
La principale difficolta` connessa al trattamento delle eccezioni e` quella
di riportare lo stato dell'applicazione ad un valore consistente. Il verificarsi
di un tale vento comporta infatti (in linea di principio) l'interruzione di
tutta una sequenza di operazioni rivolta ad assolvere ad una certa funzionalita`,
allo svuotamento dello stack ed alla deallocazione di eventuali risorse allocate
fino a quel punto relativamente alla richiesta in esecuzione. Le informazioni
necessarie allo svolgimento di queste operazioni sono in generale dipendenti
anche dal momento e dal punto in cui si verifica l'eccezione e non e` quindi
immaginabile (o comunque facile) che la gestione dell'errore possa essere incapsulata
in un unico blocco di codice richiamabile indipendentemente dal contesto in
cui si verifica il problema.
In linguaggi che non offrono alcun supporto, catturare e gestire questi errori
puo` essere particolarmente costoso e difficile, al punto che spesso si rinuncia
lasciando sostanzialmente al caso le conseguenze. Il C++ comunque non rientra
tra questi linguaggi e offre alcuni strumenti che saranno oggetto dei successivi
paragrafi di questo capitolo.
|