假设某人编写了一个打开某个文件的方法,并在某些情况下忘记关闭它.鉴于此方法,我可以确保在不更改原始方法的代码的情况下关闭文件吗?
我看到的唯一选择是编写一个包装原始方法的方法,但只有在原始方法之外定义文件时才可以这样做,对吧?否则它会永远消失......
由于这是C++,我希望将使用I/O流库(std::ifstream和朋友),而不是传统的CI/O库.在这种情况下,是的,文件将被关闭,因为流对象的析构函数关闭了流.
如果你使用的是旧版C API,那么不,你运气不好.
在我看来,像这样的面试问题的最佳答案是指出代码中的真正缺陷 - 手动管理资源 - 并建议正确的解决方案:使用自动资源管理("资源获取是初始化"或"范围限制资源管理").