前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++核心准则E.19:如果无法选择适当的资源句柄,使用final_action表现清除处理​

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

作者头像
面向对象思考
发布2020-08-10 09:56:12
5160
发布2020-08-10 09:56:12
举报

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(示例)

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 面向对象思考 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • E.19: Use a final_action object to express cleanup if no suitable resource handle is available
  • Reason(原因)
    • Note(注意)
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档