自定义文件类中fstream对象的生存期

Lifetime of an fstream object in a custom File Class

本文关键字:对象 生存期 fstream 文件 自定义      更新时间:2023-10-16

我正在创建一个File类,它使用fstream来读取/写入文件。我在功能方面没有问题,但在关于fstream对象的生存期的最佳实践中没有问题。

fstream对象存储为为每个新File(path)创建的成员变量,并在每个File实例的生存期内使用该fstream,这样更好吗?

或者,对于我可以在File实例上调用的每个单独的函数(readBytes()writeBytes()exists()isDirectory()等),我是否应该声明一个本地ifstream/ofstream,做需要做的事情,并且当函数存在时,它们超出范围并自动关闭?

在第一种情况下,我担心如果我有很多文件"打开",那么同时激活那么多流会受到惩罚。

在第二种情况下,持续创建和销毁fstream对象似乎效率很低。

任何对此有经验的人如能发表评论,我们将不胜感激!

谢谢,乔恩。

您已经准确地解决了这两个问题。通常,最有效的方法是保持文件在身边(打开),直到您冒着文件描述符用完的风险。在某些系统中,文件描述符不会立即回收,因此您需要通过在用完之前关闭一些文件来限制描述符的使用。

如果你更了解哪些文件读/写得更频繁,哪些文件只读/写大块,等等,你可以关闭那些不得不再次打开它们的惩罚相对较小的文件。