L'eccezione principale al lancio di qualcosa derivata da std::exception
sarebbe se si utilizza un framework (ad es. MFC) con una propria gerarchia di eccezioni. In tal caso, in genere si desidera derivare da un punto appropriato nella loro gerarchia.
Nota che non sto tentando in particolare di tenere premuto MFC come esempio di gestione delle eccezioni pulita (o di una progettazione pulita in generale), solo un esempio di un framework che include una gerarchia di eccezioni. Quando si utilizza un framework che definisce già una gerarchia di eccezioni, è generalmente meglio usarlo.
In altre parole, diversamente dalle preferenze in C++, è generalmente accettato che le eccezioni dovrebbero essere una singola gerarchia monolitica con una singola radice. Per la libreria standard, quella singola radice è std::exception
, ma altri framework hanno alternative e, se ne forniscono una, generalmente la si vuole inserire nella propria.
fonte
2012-02-27 23:31:48
Non lanciare stringhe o stringhe! Se si lanciano sempre sottoclassi di 'std :: exception', è possibile inserire una clausola catch-all in' main' che gestisce tutte le eccezioni non gestite altrove e stampa il 'what()' dell'eccezione. –