ofsでファイルを開くのはいいのですが、ofs.closeを使わなくてもファイル入出力できます。やらなかった場合どんな影響が出てしまうのでしょうか。知っている方いましたら、知らないので教えてほしいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2019/03/06 08:35

回答2件
0
やらなかった場合どんな影響が出てしまうのでしょうか。
実効上の影響はさほどありません。std::fstream
ファミリ(ifstream
, ofstream
)では、該当変数のスコープが切れる際に 自動的にファイルクローズ処理が呼び出され ます。
c++
1{ 2 std::ofstream ofs("output.dat"); 3 4 ofs << /*...*/; 5 6} // 変数ofsのスコープ終了=自動的にcloseが呼び出される
逆の表現では、変数のスコープよりも早くファイルクローズを行いたい特殊なケースでのみ、明示的に close
メンバ関数を呼び出す必要があります。
ofs.closeを使わなくてもファイル入出力できます。
close
メンバ関数の目的は、「OSのファイル管理用リソース」と「C++ファイルストリームオブジェクト(std::ofstream
など)」の関連付けを切断しリソースを解放することです。実ファイルに対する入出力(読み/書き)とは直接的には無関係です。
一方で、C++ファイルストリームオブジェクトでは「バッファリング機構」を備えるため、std::ofstream
によるファイル書出処理ではファイルクローズが行われるまで実ファイルが更新されないケースもあります。この場合でもストリームに対するフラッシュ(flush)操作を行うことで、そこまでの書出データを実ファイルへと反映できます。これはログファイル出力などでよく用いられる手法です。
c++
1std::ofstream logfile("application.log"); 2 3// ログファイルへ1行出力し、かつフラッシュ操作を行う 4logfile << "invoke something" << std::endl; 5... 6// 万一プログラムがここで異常終了してしまっても、 7// 直近までのログ内容がファイルに書き出されている。
投稿2019/03/07 11:55
総合スコア6191
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2019/03/10 17:30

0
オープンするファイル数には限度(OSごとに違う)があります。また、開けっ放しだとシステムリソース(メモリとか)が消費されます。まぁ、プログラムが終了すれば通常は開放されますが・・・
で、
ofs.closeを使わなくてもファイル入出力できます。
というのは何でしょう?close前ならオープンモードによった操作は出来て当たり前ですが?
closeすればそのファイルは閉じられ読み書きできなくなります。close後のファイルへの読み書きは絶対にしないでください(何が起こっても知りませんw)
「追記」
メモリの取得(malloc()とかnewとか)やファイルの後始末は、プログラマの責任です。“システム(OS)がやってくれるからいい”と言うのは怠慢です。気をつけましょう。
「追記」うちのOS(linux mint 191)での限界
text
1usr ~ % limit 2cputime unlimited 3filesize unlimited 4datasize unlimited 5stacksize 8192 kbytes 6coredumpsize 0 kbytes 7memoryuse unlimited 8vmemoryuse unlimited 9descriptors 1024 ←プロセスに許可されるオープン・ファイル記述子の最大数 10memorylocked 16384 kbytes 11maxproc 63648 12maxlocks unlimited 13maxsignal 63648 14maxmessage 819200 15maxnice 0 16maxrtprio 0 17maxrttime unlimited 18
投稿2019/03/05 20:50
編集2019/03/07 00:39総合スコア6851
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2019/03/06 08:34

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。