C++11 学习笔记(3) 使用闭包模拟实现 finally 关键字

代码出现异常时, 往往会对异常做处理, 而不是直接将程序 abort
而抛出异常之后往往也要做相应的资源释放或者清理步骤, 往往需要最终操作.

例如在在读文件过程:
1. FILE* f open 操作
2. 读文件块
3. 读取后在内存操作, 比如调用 operationRead(f); // 伪代码 操作成功 走 4, 否则出现异常; operationRead(f) 不能正常执行 走 5
4. 操作成功, 走 6
5. 处理异常, 比如打印, 走6
6. 此时属于 finally 步骤, 关闭文件句柄 close(f);

C++11并未实现 finally (注意: 与 final关键字有区别)

那么现在看看模拟实现, 转自codeproject

使用 C++11 特性 Lambda Functions in C++11

  • the Definitive Guide Function objects std::function std::bind 这个类似 Python的 functools.partial

eg:

为了实现上面代码的供能, 定义一个 finally 类:

最后想要达到的效果:

参考:
* msdn
* C++11 lambda闭包

原创文章,转载请注明: 转载自kaka_ace's blog

本文链接地址: C++11 学习笔记(3) 使用闭包模拟实现 finally 关键字

发表评论

电子邮件地址不会被公开。 必填项已用*标注