でfgets()に戻るが、以下のコードの例外の捕捉のコストは話の本筋ではないので無視していただきたいのだが
(そのコストが気になるなら「スコープを抜けたら閉じるFILE*」みたいなブツを作ったらfclose()のエラー処理以外は同じにできる)、
void foo() {
 FILE* fp = fopen(...); // fpがNULLだった場合のチェックは記載省略
 try {
  Bar x, y, z;
  (fgets()とかのコード)
 } catch (Exception ex)
  fclose(fp)
}
}
とかなコードを見たら普通の人は「chatchに飛んできて大丈夫なんか?」とtryブロック内をチェックするが
(x, y, zの解放が保証される、とかは関係無しに
例外安全主義者にかかってはそんなことはお構いなしである。とにかく安全と言い張る