2012-03-30 18 views
0

fstreamを使用してファイルに読み書きするFileクラスを作成しています。私は、機能面ではなく、むしろfstreamオブジェクトの寿命に関するベストプラクティスにおいて問題はない。カスタムファイルクラスのfstreamオブジェクトの寿命

fstreamオブジェクトを新しいFile(path)ごとに作成されたメンバー変数として格納し、各Fileインスタンスの有効期間にわたってそのfstreamを使用する方が良いですか?

それとも、私が(などreadBytes()writeBytes()exists()isDirectory()、)Fileインスタンス上で呼び出すことができ、個々の機能、私は地元のifstream/ofstreamを宣言する必要があるため、実行する必要が何をすべきか、および機能彼らは範囲外になり、自動閉鎖されていますか?

最初のケースでは、多くのファイルが「オープン」になっていると、同時に多数のストリームをアクティブにしてしまうと不利になることが懸念されます。

2番目のケースでは、fstreamオブジェクトを継続して作成して破棄するのは非効率的なようです。

コメントをいただけると幸いです。

ありがとう、 Jon。

+0

あなたの必要なものと何を達成するのかを言うことは難しいので、それを伝えることは不可能です。 –

+0

私は彼が、彼のクラスが、インスタンスの存続期間にわたってすべてのメンバ関数によって使用される実際のファイルの 'fstream'インスタンス変数を含むべきかどうか、あるいは各関数のために別々の' fstream'インスタンスを作成する必要があるかどうかを知りたいと思いますコール。彼が各機能の 'パス'を再オープンしたいのかどうか分からないので、質問の言い直しが必要かもしれません。 – hochl

答えて

0

あなたは頭に2つの問題を釘付けにしました。一般的に、最も効率的なアプローチは、ファイル記述子が足りなくなるリスクを回避するまで、ファイルを開いたままにすることです。システムによっては、ファイル記述子がすぐにリサイクルされないため、ファイルがなくなる前にファイルを閉じてディスクリプタの使用を制限する必要があります。

大きなファイルで読み書きする頻度が高いファイルについてもっとよく知っている人は、ファイルを開いた後のペナルティが比較的小さいものを閉じることができます。

+0

これはあまり真実ではありません。 OPから、クラス 'File'の理由がわかりません - 特定の時間に適切なファイルにデータを保存しているだけかもしれませんし、単に 'File'がログファイルは特定の方法でフォーマットされています。私たちは、クラスが達成しようとしていることについて説明することなく、質問に答えることはできません。 –

関連する問題