ifstream を手動で閉じる必要がありますか?
C では、リソースの取得は初期化 (RAII) により、オブジェクトが自動的にクリーンアップされるようになります。範囲外になると解放されます。このメカニズムは、std::ifstream を含むさまざまなクラスで採用されています。
std::ifstream オブジェクトが作成されると、指定されたファイルが入力用に開きます。デフォルトでは、ファイルはオブジェクトが破棄されるまで開いたままになります。ただし、一般的な疑問が生じます: file.close() を手動で明示的に呼び出す必要があるか、それとも RAII に依存して処理できるでしょうか?
答えは NO です。
RAII と ifstream
RAII の目的はまさに、手動によるリソースのクリーンアップの必要性を軽減することです。 ifstream の場合、デストラクターは関連付けられたファイルを閉じる責任を負い、file.close() への明示的な呼び出しは不要になります。
提供されたコード例では、ファイル オブジェクトは readContentsOfFile のスコープ内で宣言されています。 () 関数。関数が戻ると、オブジェクトはスコープ外になり、デストラクターが自動的に呼び出されます。これにより、関数が終了する前にファイルが確実に閉じられます。
早期終了のためのネストされたスコープ
RAII はオブジェクトの破棄時にファイルを閉じることを保証しますが、ファイルを閉じることが望ましい場合があります。関数内で前のファイル。これは、ネストされたスコープを使用して実現できます。
{ std::ifstream file(fileName.c_str()); if (file.good()) { std::stringstream buffer; buffer << file.rdbuf(); } file.close(); }
ネストされたスコープ内で、ファイル オブジェクトが作成され、開かれます。ファイルが有効な場合は、すぐに処理され、内部スコープが終了する前にファイルが閉じられます。
結論
std::ifstream はすでにファイルを処理します。 RAII による閉鎖。 file.close() への手動呼び出しは不要であり、C の RAII の原則に違反するため、避ける必要があります。
以上がC の「ifstream」を手動で閉じる必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。