1. ホーム
  2. c++

std::fstreamを閉じる必要がありますか?重複

2023-10-02 10:06:14

質問

重複の可能性があります。

ifstreamを手動で閉じる必要がありますか?

を呼び出す必要がありますか? fstream.close() を呼び出す必要があるのでしょうか? fstream は、破壊時にストリームを閉じる適切な RAII オブジェクトですか?

私はローカルな std::ofstream オブジェクトがあります。このメソッドを終了した後、closeを呼び出さずに常にファイルを閉じていると考えてよいでしょうか?私はデストラクタのドキュメントを見つけることができませんでした。

どのように解決するのですか?

前の回答は誤解を招くと思います。

fstream が適切なRAIIオブジェクトである場合、それは はスコープの終わりで自動的に閉じられ、そこには絶対に は一切必要ありません。 を呼び出す必要は全くありません。 close を手動で呼び出す必要はありません。

特に、「ベストプラクティス」ではないので、出力をフラッシュする必要はありません。

また、Drakosha の言うとおり close を呼び出すことで、ストリームのフェイルビットをチェックできる可能性があるのはDrakoshaの言うとおりですが、とにかくそんなことをする人はいません。

理想的な世界では、単に stream.exceptions(ios::failbit) を呼び出し、投げられた例外を fstream のデストラクタで投げられる例外を処理します。しかし残念ながら、デストラクタでの例外はC++では壊れた概念なので、それは良いアイデアではありません。

そこで であれば の場合、ファイルのクローズが成功したかどうかをチェックしたい場合は、手動で行ってください(ただし、その場合のみ)。