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
- InvokeHelper类
- Android官方支持百分比设置宽和高的控件及示例
- Extjs radio布局--横向排列
- 第六章 正则表达式的构建
- android 自定义相机
- Android学习第六弹之 Android字体大小自适应不同分辨率的方法
- 仿12306查询火车票功能
- Spring Boot开发Web应用
- C#/.NET RestSharp网络组件实现上传文件到远程服务器【可跨域传文件】
- android 自定义gallerey并实现预览功能
- Android学习第五弹之Matrix的用法
- 推荐一款超强大的基于Angularjs的自动完成(Autocomplete)标签及标签组插件–ngTagsInput
- Android新组件RecyclerView介绍,其效率更好
- android wheelview实现三级城市选择
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法