try { // Flusso normale}catch (NetworkException &e){ // Flusso per quando cade la linea}catch (FilesystemException &e){// Flusso per quando scoppia il disco}catch (Exception &e){// Flusso per eccezioni generiche}
Allora e' un fattore commerciale ? Il pacchetto "exceptions" per VectorCast(C++) costa un ulteriore esborso di 12.000 testoni.
Se il C è usatissimo in embedded un motivo c'è
@Z80Fan: sicuramente sarebbe interessante approfondire la questione, anche perchè l'exception handling è una funzione comoda che consente di scrivere codice più sicuro senza dilungarsi troppo con if innestati e relativi codici di controllo.
Secondo me, per tenerti la possibilità di punzecchiare il sistema nel suo ambiente operativo, non usare new direttamente ma mettilo dentro a una funzione fatta da te.Così hai un punto singolo dove avviene l'allocazione e li ci puoi mettere tutto il codice di distruzione che vuoi. (anche robe tipo if (rand()%100) throw badalloc(); ricordati solo di toglierlo nel codice definitivo! )
@TheKaneBtu usi Cantata ? O che altro software usi ?
ma anche no, questo è un anti-pattern orrendo, pari solo al "catch em all" ( vedi numero 2 qui http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html)
int* myalloc(size_t s) { int* p = new[s]; cout<<"allocati "<<s<<endl;}
Tu hai sempre qualcosa da obiettare eh?
Fai bene a fidarti poco, ma ti dico che si fa in modo diverso:Preallochi tutta la memoria fisica che puoi in un unico buffer (oppure un buffer diverso per ogni subsystem), imposti la tua funzione di allocazione custom, ad esempio Two Level Segregated Fit ( http://www.gii.upv.es/tlsf/ ) come new_handler ( http://www.cplusplus.com/reference/new/set_new_handler/ ), cioè una funzione di callback che viene chiamata quando la new fallisce l'allocazione, e ti fai tutti i log che vuoi.