In che modo il compilatore gestisce le eccezioni implicite? Alla ricerca di strategie di progettazione

1

Attraverso la funzione handleException, l'eccezione incontrata è implicita. In che modo il compilatore gestisce questo passaggio implicito di eccezioni? [Ad es. nei metodi C ++, questo puntatore viene passato all'account per l'oggetto corrente. La mia domanda è come fa un compilatore a gestire le eccezioni internamente - handleException non ha argomenti.]

 void handleException()
 {
   try {
     throw;
   }
   catch (MyException& e) {
     ...code to handle MyException...
   }
   catch (YourException& e) {
     ...code to handle YourException...
   }
 }

 void f()
 {
   try {
     ...something that might throw...
   }
   catch (...) {
     handleException();
   }
 }
    
posta Fanatic23 19.01.2011 - 07:13
fonte

1 risposta

3

Pay no attention to that man behind the curtain.

Poiché il compilatore sa come implementa le eccezioni, può utilizzare tali informazioni interne. Il modo più semplice è utilizzare una variabile globale (o thread locale) per memorizzare informazioni su qualsiasi eccezione "attiva"; quindi recuperalo, principalmente per ottenere informazioni sul tipo e propagare. C ++ 0x espone parzialmente queste informazioni con std :: exception_ptr; vedere §18.8.5 in N3225.

Le eccezioni sono gestite in modo diverso dai parametri; l'analogia con "questo" non sarà utile. Il valore di "this" viene solitamente considerato come un normale parametro pointer, ad eccezione del fatto che è nascosto all'utente dietro la tenda.

    
risposta data 19.01.2011 - 07:29
fonte

Leggi altre domande sui tag