Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
appunti3s:eccezioni [2018/05/03 22:30]
profpro
appunti3s:eccezioni [2019/07/27 10:51] (current)
profpro corretto codice
Line 90: Line 90:
  
 ===== Catch generico =====  ===== Catch generico ===== 
-Alla fine della lista dei gestori //catch()// può essere utile inserire un blocco //catch()// che raccolga tutto quello che non è stato ricevuto dai suoi predecessori. Tale gestore deve avere la seguente sintassi: <​code>​ catch(...) ​ {    // contenuto }</​code>​  +Alla fine della lista dei gestori //catch()// può essere utile inserire un blocco //catch()// che raccolga tutto quello che non è stato ricevuto dai suoi predecessori. Tale gestore deve avere la seguente sintassi: ​ 
-Tuttavia questo sistema rischia di catturare anche eccezioni impreviste. La cosa migliore è far derivare tutte le eccezioni dalla classe base //​std%%::​%%exception//​ e usare questa forma <​code>​ catch (std%%::%%exception&​ e) {   //​contenuto } </​code>​.+ 
 +<​code>​ catch(...) ​ {    // contenuto } 
 +</​code>​  
 +Tuttavia questo sistema rischia di catturare anche eccezioni impreviste. La cosa migliore è far derivare tutte le eccezioni dalla classe base //​std%%::​%%exception//​ e usare questa forma  
 + 
 +<​code>​ catch (std::​exception&​ e) {   //​contenuto } </​code>​. 
 Questo catch generico è spesso controproducente perché catturano delle eccezioni che potrebbero essere gestite ad un livello più esterno. Esistono delle eccezioni che non sono di stretta competenza della funzione dove si è generata l'​eccezione. Ad esempio, un costruttore fa //new// e viene generata un'​eccezione //​std%%::​%%bad_allocate//,​ ma la gestione di questo tipo di eccezione è esterna perché è comune a tutte le funzioni. Questo catch generico è spesso controproducente perché catturano delle eccezioni che potrebbero essere gestite ad un livello più esterno. Esistono delle eccezioni che non sono di stretta competenza della funzione dove si è generata l'​eccezione. Ad esempio, un costruttore fa //new// e viene generata un'​eccezione //​std%%::​%%bad_allocate//,​ ma la gestione di questo tipo di eccezione è esterna perché è comune a tutte le funzioni.
  
  • appunti3s/eccezioni.txt
  • Last modified: 2019/07/27 10:51
  • by profpro