try-catchで囲むことはほぼコストにならない。throwは秒間100万レベルとかに落ちる。
つまり正常系に利用しなければおk。
その他、リソースリークの問題があるからRAIIや例外中立など知識とノウハウが
結構求められるのが実情。うっかり使うと色々リークが起きて痛い目に合う。
けどそれらを乗り越えれば、コード省力化とエラーハンドリング周りの
余りあるメリットを享受できる。