博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++版的defer语句
阅读量:6848 次
发布时间:2019-06-26

本文共 1065 字,大约阅读时间需要 3 分钟。

hot3.png

<!-- C++版的defer语句 -->

Go语言有个很方便的语句defer, 具体细节参考:

一直想在C++中也能模拟类似defer的效果, 经过无数次google和尝试之后重要找到解决方法. 整理后的代码在这里:

基本的使用方法:

FILE* fp = fopen("foo.txt", "rt");if(fp == NULL) return false;defer([&](){ printf("fclose(fp)\n"); fclose(fp); });char* buf = new char[1024];defer([&](){ printf("delete buf\n"); delete[] buf; });defer([](){ printf("defer a: %d\n", __LINE__); });defer([](){ printf("defer a: %d\n", __LINE__); });defer([](){ printf("defer a: %d\n", __LINE__); });{	defer([](){ printf("defer b: %d\n", __LINE__); });	defer([](){ printf("defer b: %d\n", __LINE__); });	defer([](){ printf("defer b: %d\n", __LINE__); });}defer([](){	printf("defer c:\n");	for(int i = 0; i < 3; ++i) {		defer([&](){ defer([&](){			printf("\ti = %d: begin\n", i);			defer([&](){ printf("\ti = %d\n", i); });			printf("\ti = %d: end\n", i);		});});	}});

需要注意的地方:

  • defer 定义的对象在超出作用域时执行闭包函数(析构函数)
  • defer 定义的对象在同一个文件内部标识符不同(根据行号生成)
  • defer 在全局作用域使用可能会出现重名现象(行号相同)
  • defer 在判断语句使用可能提前执行(作用域结束时)
  • defer 在循环语句内使用无效(作用域结束时)
  • defer 和Go语言的defer并不完全等价

更多参考:

转载于:https://my.oschina.net/chai2010/blog/117920

你可能感兴趣的文章
Activit工作流学习例子
查看>>
SQL Server 中位数、标准差、平均数
查看>>
机器如何猜你所想?阿里小蜜预测平台揭秘
查看>>
关于数组array_diff(array1, array2)求差集来比较数组是否相等的问题细究
查看>>
React 源码深度解读(七):事务 - Part 1
查看>>
Javascript设计模式(四)策略模式
查看>>
leetcode.69.求一个数的平方根
查看>>
《简明 PHP 教程》04 基础
查看>>
CSS选择器引起的一些思考
查看>>
5分钟内看懂机器学习和深度学习的区别
查看>>
第三章 高级装配
查看>>
netcore 获取本地网络IP地址
查看>>
安装了宝塔面板的服务器,一键部署私有云
查看>>
干货!14个最新优质加载动画设计,让等待成为一种享受
查看>>
Android listview与adapter用法
查看>>
Android开发之再探底部菜单TabLayout与Bottom navigation实现方式
查看>>
传瑞幸咖啡获新一轮融资,投前估值达20亿美元
查看>>
Elasticsearch上手 - 遇到的问题
查看>>
Greenplum 清理垃圾、修改存储模式(行列变换) 平滑方法 - 交换数据、交互分区...
查看>>
Oracle 12c Data Guard搭建(一)
查看>>