Non c'è una risposta assoluta. Le eccezioni sono uno strumento potente ma vanno usate con parsimonia e solo quando ci si può aspettare un comportamento inatteso del programma.
Per esempio una mancata allocazione di memoria (che già l'operatore new lancia) oppure il superamento di un limite di un array.
Se poi non si fa uso di smart pointer (o meglio del paradigma RAAI) la faccenda si complica perché occorre intercettare il throw, chiudere la risorsa acquisita e rilanciare un nuovo throw.

Per farla breve, dipende dal codice.