C中是否有范围管理的文件流?

背景

在引入unique_ptr(或boost的范围指针)之前,到处都有这种锅炉板指针内存管理.

int* a = new int(5);
// do stuff
delete a;
a = nullptr

现在我们可以做到

std::unique_ptr<int> a = std::make_unique<int>(5);

而已!当一个超出范围时,它将负责所有的清理工作.它不仅方便,而且在早期返回或抛出异常的情况下实际上有助于防止内存泄漏.

写入文件流时,我注意到相同的锅炉板代码

std::ofstream ofs;
ofs.open("out.txt");
// writing stuff
ofs.close();

是否有类似的机制来处理通过RAII打开和关闭文件?因此,当流(或某种包装器)超出范围时,它将自动超出范围并释放文件句柄?否则,我们可能会遇到与指针相同的问题,如果您提前返回,则文件可能无法关闭.

最佳答案
ofstream本身是作用域绑定的,可以打开文件的构造函数和关闭它的析构函数.所以你可以写

{
    std::ofstream ofs("out.txt");
    // writing stuff
}

与您的代码具有相同的行为,加上RAII善良.

转载注明原文:C中是否有范围管理的文件流? - 代码日志