[解決済み】ifstreamを手動で閉じる必要がありますか?
2022-04-05 08:55:11
質問
を手動で呼び出す必要がありますか?
close()
を使用した場合
std::ifstream
?
例えば、コードでは
std::string readContentsOfFile(std::string fileName) {
std::ifstream file(fileName.c_str());
if (file.good()) {
std::stringstream buffer;
buffer << file.rdbuf();
file.close();
return buffer.str();
}
throw std::runtime_exception("file not found");
}
を呼び出す必要があるのでしょうか?
file.close()
手動ですか?とはならないのでしょうか?
ifstream
を使用します。
RAII
ファイルのクローズに使うのですか?
解決方法は?
NO
そのためにRAIIがあり、デストラクタにその仕事をさせるのです。 手動で閉じることに害はありませんが、それはC++の方法ではなく、クラスを使ったCでのプログラミングです。
関数の終了前にファイルを閉じたい場合は、常にネストされたスコープを使用することができます。
標準規格(27.8.1.5 クラステンプレート basic_ifstream)において。
ifstream
を実装することです。
basic_filebuf
実際のファイルハンドルを保持するメンバです。 これは、ifstreamオブジェクトがデストラクトするときにも
basic_filebuf
. そして、標準規格(27.8.1.2)から、そのデストラクタはファイルを閉じます。
virtual ˜basic_filebuf();
エフェクト クラスのオブジェクトを破棄します。
basic_filebuf<charT,traits>
. 呼び出しclose()
.
関連
-
[解決済み] テスト
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】'cout'は型名ではない
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] C++で仮想関数が必要な理由とは?
-
[解決済み] C++でifstreamを使用してファイルを一行ずつ読み込む
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】Enterキーを押して続行する
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] C++でファイルの行数を数えるには?
-
[解決済み] ASCII ファイルを丸ごと C++ std::string に読み込む [重複] 。
-
[解決済み】デストラクタで例外を投げてはいけない場合、その中のエラーはどのように処理するのでしょうか?
-
[解決済み】C++でテキストファイルにテキストを追加する方法は?