Oggi ho trovato un bug in un blocco catch
:Perdere tipo di eccezione quando rethrowing un'eccezione da un blocco catch
catch (const exception& e){
// do something
// throw e; <-- bug!
throw; // <-- right thing to do
}
In pratica se io rigenerare l'eccezione e
esplicitamente, ottengo un nuovo std::exception
ricostruito, in Infatti il messaggio dal metodo what()
era il valore predefinito std::string
, anziché il mio messaggio personalizzato.
Qual è la spiegazione? Ho pensato che throw;
è solo una stenografia di throw ExceptionJustCaught;
.
È la differenza tra un valore e un riferimento. –
Questo è un concetto molto importante che viene spesso trascurato (e, a mio avviso, un po 'complicato di sintassi che dovrebbe essere almeno un avvertimento quando compilato ..). Ottima domanda! – NHDaly