如何确保在运行结束时关闭文件

use*_*400 5 c++

假设某人编写了一个打开某个文件的方法,并在某些情况下忘记关闭它.鉴于此方法,我可以确保在更改原始方法的代码的情况下关闭文件吗?

我看到的唯一选择是编写一个包装原始方法的方法,但只有在原始方法之外定义文件时才可以这样做,对吧?否则它会永远消失......

Jam*_*lis 6

由于这是C++,我希望将使用I/O流库(std::ifstream和朋友),而不是传统的CI/O库.在这种情况下,是的,文件将被关闭,因为流对象的析构函数关闭了流.

如果你使用的是旧版C API,那么不,你运气不好.

在我看来,像这样的面试问题的最佳答案是指出代码中的真正缺陷 - 手动管理资源 - 并建议正确的解决方案:使用自动资源管理("资源获取是初始化"或"范围限制资源管理").

  • @ bjskishore123:我不知道`_fcloseall()`来自何处,但它不是C标准库的一部分.即便如此,鉴于其名称,我不知道它在任何真正的程序中会有多大用处:它的使用将表明对严重程序错误的描述. (2认同)