Come gestire le specifiche delle eccezioni storiche nel codice C ++ gestito

3

Oggi ho scoperto alcune specifiche di eccezione nel codice legacy che devo mantenere, quando Cppcheck 1.68 ( [Inconclusive] ma correttamente) ha indicato che le eccezioni specificate non sono gestite in porzioni specifiche del codice.

[Inconclusive] Unhandled exception specification when calling function [...]. Either use a try/catch around the function call, or add a exception specification for [...] also.

Ma il verificarsi di uno di essi sarebbe catastrofico per il programma, quindi è una buona idea non gestirli localmente, e copiare le specifiche ripetutamente nel codice sarebbe assurdo. Inoltre, le specifiche delle eccezioni hanno ottenuto deprecato in C ++ 11 (per buoni motivi).

Quindi, generalmente parlato: È il meglio che posso fare con le specifiche delle eccezioni, rimuovendole?

    
posta Wolf 06.01.2015 - 12:39
fonte

2 risposte

3

Praticamente. Non c'è motivo di tenerli. Li eliminerei tutti.

    
risposta data 06.01.2015 - 17:04
fonte
1

Le specifiche di eccezione non sono ottimali in C ++ come menzionato anche nel collegamento da Rob K di Herb Sutter, e quindi sono deprecate dallo standard in C ++ 11 vedi § 15.4.18.

Invece di usare le specifiche delle eccezioni, un'alternativa potrebbe essere quella di spostarle nel blocco dei commenti di funzione, in questo modo l'informazione non viene completamente persa. Non sottovalutare il potere di commenti ben scritti.

Se per esempio è stato utilizzato Doxygen, è possibile utilizzare facilmente i comandi throws o exception per descrivere le eccezioni generate dalla funzione.

/**
 * Some function description.
 *
 * @throws SomeException In this or that situation this function will thrown an 
 * exception of type SomeException.
 */
void Foo();

A mio avviso, le specifiche delle eccezioni non sono di alcuna utilità (con l'eccezione della nuova noexcept) in C ++, a causa dei problemi menzionati da Herb Sutter (vedi link di Rob K), quindi il tuo è meglio rimuoverli, ma spostare le informazioni su un commento, per la funzione.

    
risposta data 07.01.2015 - 11:58
fonte