gpt4 book ai didi

c++ - C++ 中是否有作用域管理的文件流?

转载 作者:太空狗 更新时间:2023-10-29 19:52:16 25 4
gpt4 key购买 nike

背景

在引入 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 处理文件打开和关闭?那么当流(或某种包装器)超出范围时,它会自动超出范围并释放文件句柄吗?否则,我们可能会遇到与指针相同的问题,如果您提前返回,文件可能不会关闭。

最佳答案

ofstream 本身是范围绑定(bind)的,具有可以打开文件的构造函数和关闭文件的析构函数。所以你可以写

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

具有与您的代码相同的行为,以及 RAII 优点。

关于c++ - C++ 中是否有作用域管理的文件流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28300716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com