Dipende da cosa si pensa throw()
significa.
Ciò che in realtà significa in base allo standard è "inserire codice aggiuntivo per ogni chiamata a questa funzione, se necessario, o nella funzione stessa, per garantire che se questa funzione viene lanciata, viene rilevata l'eccezione e viene chiamato std::unexpected
" .
Alcuni compilatori lo hanno implementato per significare "ottimizzare le chiamate a questa funzione supponendo che non generino", ma (in violazione dello standard) non ha implementato il controllo di runtime.
Quindi, aggiungendolo a un distruttore (che di certo non dovrebbe lanciare) (ma in pratica potrebbe non esserlo) aggiungere un controllo di runtime che non dovrebbe mai essere attivato e quindi potrebbe aiutare a eseguire il debug del codice. Può o non può consentire un'ottimizzazione.
fonte
2012-05-25 14:46:31
Ho dovuto aggiungere un distruttore no-throw alla mia classe di eccezione derivata da std :: exception per eliminare un avviso o un errore che gcc emetteva quando non ne avevo fornito uno. Non mi piaceva che la classe derivata non avesse la stessa specifica di non lancio della classe base. –
* Se * decidi di farlo, userei 'noexcept' invece di' throw() ', se possibile. Le specifiche delle eccezioni dinamiche (incluso 'throw()', almeno così come l'ho letta) sono deprecate (anche se il tuo compilatore non è all'altezza, potresti non essere in grado di farlo). –