专栏首页C++核心准则原文翻译C++核心准则E.19:如果无法选择适当的资源句柄,使用final_action表现清除处理​

C++核心准则E.19:如果无法选择适当的资源句柄,使用final_action表现清除处理​

E.19: Use a final_action object to express cleanup if no suitable resource handle is available

E.19:如果无法选择适当的资源句柄,使用final_action表现清除处理

Reason(原因)

finally is less verbose and harder to get wrong than try/catch.

和try/catch比起来,finally更加简练并不容易出错。

Example(示例)

void f(int n)
{
    void* p = malloc(n);
    auto _ = finally([p] { free(p); });
    // ...
}
Note(注意)

finally is not as messy as try/catch, but it is still ad-hoc. Prefer proper resource management objects. Consider finally a last resort.

finally不像try/catch那样凌乱,然仍然是针对具体问题的特殊对策。使用适当的资源管理对象的方式更好。将finally视为最后一招。

Note(注意)

Use of finally is a systematic and reasonably clean alternative to the old goto exit; technique for dealing with cleanup where resource management is not systematic.

使用finally一种系统化、合理化的代替既有代码中goto exit的方式。使用这个技术可以处理资源没有被系统化管理的问题。

Enforcement(实施建议)

Heuristic: Detect goto exit;

启发式的:检出goto exit;

关于finally

finally是gsl提供的一个支持函数,可以生成一个用户释放资源的清除动作。具体实现请参考以下链接:https://github.com/microsoft/GSL/blob/master/include/gsl/gsl_util

原文链接 https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#e19-use-a-final_action-object-to-express-cleanup-if-no-suitable-resource-handle-is-available

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

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

原始发表时间:2020-08-06

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则E.14:使用根据目的设计的用户定制类型异常(非内置类型)

    E.14: Use purpose-designed user-defined types as exceptions (not built-in types)

    面向对象思考
  • C++核心准则ES.72:如果存在明显的循环变量,for语句要好于while语句

    Readability: the complete logic of the loop is visible "up front". The scope of ...

    面向对象思考
  • C++核心准则T.47:避免使用通用名称的高度不受限模板

    An unconstrained template argument is a perfect match for anything so such a tem...

    面向对象思考
  • SAP Analytics Path Framework的filter实现原理分析

    I am recently doing self study on Analytics Path Framework and as a beginner I h...

    Jerry Wang
  • WebComponent:像搭积木一样构建Web应用

    我们站在开发者和项目角度来聊聊 WebComponent,它是一套技术的组合,能提供给开发者组件化开发的能力。

    Dunizb
  • DOM Core 与 HTML-DOM

    DOM(文档对象模型)是由W3C制定的一套访问和操作XML(eXtensible Markup Language)文档的标准,即API。比如DOM告诉JavaS...

    Chor
  • 为什么操作DOM会影响WEB应用的性能?

    面试官经常会问你:“平时工作中,你怎么优化自己应用的性能?” 你回答如下:“我平时遵循以下几条原则来优化我的项目、以提高性能,主要有:”

    xing.org1^
  • React的diffing算法学习

    这段时间主要在学习React的使用,React是一个用于构建用户界面的框架,其使用了一些方式来使得视图渲染更加高效,这里主要记录一下学习期间了解到的Diffin...

    IMWeb前端团队
  • python pyqt5 qss选择器

    QDialog QPushButton 后代选择器 QDialog>QPushButton 第一代子

    用户5760343
  • Linux 下使用 Sar 简介

    介绍 Sar 最早是实现在 Salaris Unix 系统里,后来移植到了大部分其他的 Unix 系统(如AIX,HP-UX等)。Linux 下也有法国人写的 ...

    小小科

扫码关注云+社区

领取腾讯云代金券