自定义文件类中fstream对象的生存期
Lifetime of an fstream object in a custom File Class
我正在创建一个File类,它使用fstream
来读取/写入文件。我在功能方面没有问题,但在关于fstream
对象的生存期的最佳实践中没有问题。
将fstream
对象存储为为每个新File(path)
创建的成员变量,并在每个File实例的生存期内使用该fstream
,这样更好吗?
或者,对于我可以在File实例上调用的每个单独的函数(readBytes()
、writeBytes()
、exists()
、isDirectory()
等),我是否应该声明一个本地ifstream/ofstream
,做需要做的事情,并且当函数存在时,它们超出范围并自动关闭?
在第一种情况下,我担心如果我有很多文件"打开",那么同时激活那么多流会受到惩罚。
在第二种情况下,持续创建和销毁fstream
对象似乎效率很低。
任何对此有经验的人如能发表评论,我们将不胜感激!
谢谢,乔恩。
您已经准确地解决了这两个问题。通常,最有效的方法是保持文件在身边(打开),直到您冒着文件描述符用完的风险。在某些系统中,文件描述符不会立即回收,因此您需要通过在用完之前关闭一些文件来限制描述符的使用。
如果你更了解哪些文件读/写得更频繁,哪些文件只读/写大块,等等,你可以关闭那些不得不再次打开它们的惩罚相对较小的文件。
相关文章:
- 对象存在与对象生存期不同吗
- 指向对象生存期之外的已分配内存的指针是"invalid pointer[s]"还是"pointer[s] to an object"?
- QML QQmlPropertyList - 包含的对象生存期和'memory rules'
- 从“if constexpr”分支扩展对象生存期/范围
- 成员重新值引用和对象生存期
- 对象生存期,在这种情况下重用存储
- C++对象生存期优化
- 基于范围的 for 循环的对象生存期问题
- 使用对象生存期运行线程
- C++ Boost.Asio 对象生存期
- 作为参数立即传递的对象生存期是多少
- 智能指针列表-管理对象生存期和指针有效性
- C++标准关于对象生存期的含义是什么
- 如何在 C++11 lambda 中跟踪对象生存期
- C/C++严格的别名、对象生存期和现代编译器
- 如何使用静态强制转换管理共享对象生存期
- 调用了C++对象生存期和析构函数
- 对象生存期内显式构造函数和虚函数调用
- 目标C "autorelease" C++ -- 控制对象生存期的标准方法?
- 具有移动操作和重新值转发的对象生存期