关于malloc之后的free
一,gcc的__attribute__(cleanup())
二,vs的__try{}__finally{}
1attribute的引用如下
http://blog.chinaunix.net/uid-10386087-id-2959040.html
Cleanup(function) | 表示变量离开作用域后,调用此函数 |
2try finally机制,引用如下
http://www.cnblogs.com/zhangdongsheng/archive/2012/08/01/2618957.html
//二话不说,直接上代码
int Funcenstein2() { __try { return 3; } __finally { //在函数返回之前会处理__finally里的内容 cout<<"finally executed"<<endl; } return 4;//此函数返回3而不是4 }
通过使用终止处理程序可以防止过早的执行return语句。当return语句试图退出try块的时候,编译器会让finally代码在它。即编译器保证finally代码块在出try块的时候return之前执行。
者可以想知道,编译器是如何保证此功能的呢?原来当编译器检查程序代码时,会发现try代码里有一个return语句。于是,编译器就会生成一些代码先将返回值(例子中的 3)保存在一个由它创建的一个临时变量里,然后再执行finally语句块。这个过程被称之前为局部展开(LOCAL UNWIND)。更确切的说,当系统因try代码提前退出finally时就会发生局部展开。一旦finally代码块执行完毕,编译器所创建的临时变量值就会返回给函数调用者。