C++ 中是否有范围管理的文件流
Is there a scope-managed file stream in C++?
Background
在引入unique_ptr
(或 boost 的作用域指针)之前,到处都有这种样板指针内存管理。
int* a = new int(5);
// do stuff
delete a;
a = nullptr
现在我们可以做
std::unique_ptr<int> a = std::make_unique<int>(5);
就是这样!当a
超出范围时,它将负责所有清理工作。这不仅是一种便利,而且实际上有助于防止在早期返回或抛出异常的情况下发生内存泄漏。
问题
写入文件流时,我注意到相同的样板代码
std::ofstream ofs;
ofs.open("out.txt");
// writing stuff
ofs.close();
是否有类似的机制来处理通过 RAII 打开和关闭文件?那么当流(或某种包装器)超出范围时,它会自动脱离范围并释放文件句柄吗?否则,我们可能会遇到与指针相同的问题,如果您早return
,文件可能无法关闭。
ofstream
本身是作用域限定的,具有可以打开文件的构造函数和关闭文件的析构函数。所以你可以写
{
std::ofstream ofs("out.txt");
// writing stuff
}
具有与您的代码相同的行为,以及 RAII 的优点。
根据 http://en.cppreference.com/w/cpp/io/basic_fstream,当析构函数被调用时,文件将被关闭,所以文件流应该已经是RAII。
相关文章:
- C++ 中的 CSV 文件管理(特别是设置标头和每个标头将分别具有的值)
- 从 GUI 文件资源管理器执行程序,并且不生成终端
- 用于管理 CATIA 文件的 Web 应用程序
- VPN管理代理总是返回零配置文件,而且我似乎无法创建新的配置文件
- 将提升管理的共享内存写入文件
- 了解文件页面管理程序的功能
- 通过文件资源管理器获取文件夹目录
- 如何在 Windows 上的 c++ 中管理文件/目录的发现和使用
- Windows 资源管理器打开文件夹还原
- 如何使用C 浏览目录以创建文件资源管理器
- 多渲染API引擎着色器文件管理
- Eclipse 找不到头文件管理器,即使已设置包含路径
- 使用 VS2010 进行"Proper"文件管理
- 如何正确编译头c++文件管理器
- 方法使用文件管理器创建一个空目录
- 如何使用Qt在OS文件管理器中添加上下文菜单项
- Chromium项目是否使用文件管理库
- 字典文件管理器类
- 文件管理-每行输出一个单词
- C++:对象的文件handling_manipulation,文件管理器+二进制文件未读取