R.12:立即将显式分配的资源交给资源管理对象
If you don't, an exception or a return may lead to a leak.
如果不这样做,发生异常或者返回操作时可能会引发泄露。
Example, bad(反面示例)
void f(const string& name)
{
FILE* f = fopen(name, "r"); // open the file
vector<char> buf(1024);
auto _ = finally([f] { fclose(f); }); // remember to close the file
// ...
}
The allocation of buf may fail and leak the file handle.
如果分配buffer失败(抛出异常,译者注)就会导致文件句柄的泄露。
Example(示例)
void f(const string& name)
{
ifstream f{name}; // open the file
vector<char> buf(1024);
// ...
}
The use of the file handle (in ifstream) is simple, efficient, and safe.
(使用ifstream管理)文件句柄的用法简单、高效而且安全。
Enforcement(实施建议)
原文链接:
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r12-immediately-give-the-result-of-an-explicit-resource-allocation-to-a-manager-object