专栏首页C++核心准则原文翻译C++核心准则R.12:立即将显式分配的资源交给资源管理对象​

C++核心准则R.12:立即将显式分配的资源交给资源管理对象​

R.12: Immediately give the result of an explicit resource allocation to a manager object

R.12:立即将显式分配的资源交给资源管理对象

Reason(原因)

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(实施建议)

  • Flag explicit allocations used to initialize pointers (problem: how many direct resource allocations can we recognize?)
  • 标记使用显式分配的资源初始化指针的情况(问题是:我们能够识别出多少直接分配资源的情况?)

原文链接:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r12-immediately-give-the-result-of-an-explicit-resource-allocation-to-a-manager-object

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则Per.7:设计要为优化做准备

    Because we often need to optimize the initial design. Because a design that igno...

    面向对象思考
  • C++核心准则CP.2:避免数据竞争​

    Unless you do, nothing is guaranteed to work and subtle errors will persist.

    面向对象思考
  • C++核心准则编译边学-F.17 输入/输出参数传递非常量引用

    This makes it clear to callers that the object is assumed to be modified.

    面向对象思考
  • 动态多智能体系统中强化学习模型的解释(CS)

    译文:近年来,人们对深度强化学习(DRL)系统的透明度和可解释性越来越感兴趣。口头解释作为我们日常生活中最自然的交流方式,更值得关注,因为它可以让用户更好地了解...

    N乳酸菌
  • 部署机器学习以帮助数字人性化:提高OpenStreetMap中的图像注释效率(CS HC)

    在发展中国家的农村地区进行人口定位吸引了人性化绘图项目的关注,因为规划措施对脆弱地区的影响很大。最近的努力已经解决了这个问题,即在空中图像中检测建筑物。但是,像...

    gaowanting
  • R Programming-week1 Reading Data

    There are a few principal functions readingdata into R.

    统计学家
  • 为什么需要多线程

    对于这个问题可能很多朋友会说是为了高性能,个人觉得这是误解,多线程不等于高性能,从cpu(单核)的角度上看单线程才能带来最高性能。

    lulianqi
  • 解决最优化矩阵失真的猜想(CS Computer Science and Game Theory)

    我们正在研究的是以下矩阵失真问题:两个有限的节点集合:V和C,存在于相同的矩阵空间中,而我们的目标是找出C中一点,该节点到V中所有节点的总距离之和尽可能地小。但...

    Donuts_choco
  • 聊聊flink的SpoutWrapper

    flink-storm_2.11-1.6.2-sources.jar!/org/apache/flink/storm/wrappers/SpoutWrapper...

    codecraft
  • OCP-052考试题库汇总(27)-CUUG内部解答版

    Which two of these must be available READ/WRITE to keep a database open?

    用户5892232

扫码关注云+社区

领取腾讯云代金券