背景
在引入unique_ptr(或boost的范围指针)之前,到处都有这种锅炉板指针内存管理.
int* a = new int(5);
// do stuff
delete a;
a = nullptr
Run Code Online (Sandbox Code Playgroud)
现在我们可以做到
std::unique_ptr<int> a = std::make_unique<int>(5);
Run Code Online (Sandbox Code Playgroud)
而已!当a超出范围时,它将负责所有的清理工作.它不仅方便,而且在早期返回或抛出异常的情况下实际上有助于防止内存泄漏.
题
写入文件流时,我注意到相同的锅炉板代码
std::ofstream ofs;
ofs.open("out.txt");
// writing stuff
ofs.close();
Run Code Online (Sandbox Code Playgroud)
是否有类似的机制来处理通过RAII打开和关闭文件?因此,当流(或某种包装器)超出范围时,它将自动脱离范围并释放文件句柄?否则我们可能会遇到与指针相同的问题,如果你return早期文件可能没有关闭.
ofstream本身是作用域绑定的,可以打开文件的构造函数和关闭它的析构函数.所以你可以写
{
std::ofstream ofs("out.txt");
// writing stuff
}
Run Code Online (Sandbox Code Playgroud)
与您的代码具有相同的行为,加上RAII善良.
| 归档时间: |
|
| 查看次数: |
664 次 |
| 最近记录: |