资源管理之finally
Posted lhb666aboluo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了资源管理之finally相关的知识,希望对你有一定的参考价值。
/* 为了编写任意代码以在异常发生后执行清理工作, 人们曾经设计了很多"最终的"语言概念。 首先我们定义一个类,它在析构函数中执行任意操作。 */ template <typename F> struct Final_action{ Final_action(F f): clean{f}{} ~Final_action(){ clean();} F clean; }; /* 我们通过构造函数的参数提供"最终操作"。 接下来定义一个函数,它可以方便地推断某个操作的类型: */ template <class F> Final_action<F> finally(F f) { return Final_action<F>(f); } /* 最后,我们检验finally()的效果: */ void test() //处理非常规的资源请求任务 //该代码证明我们可以在其中嵌入任意操作 { int* p = new int{7}; //其实应该使用unique_ptr int* buf = (int*)malloc(100*sizeof(int)); //C风格的资源请求 auto act1 = finally([&]{ delete p; free(buf); //C风格的资源释放 cout << "Goodbye, Cruel world! "; }); int var = 0; cout << "var = " << var << ‘ ‘; //嵌套的块: { var = 1; auto act2 = finally([&]{ cout << "finally! "; var = 7;}); cout << "var = " << var << ‘ ‘; }//调用act2 cout << "var = " << var << ‘ ‘; }//调用act1 /* 上述代码输出: var = 0 var = 1 finally! var = 7 Goodbye, Cruel world! */
以上是关于资源管理之finally的主要内容,如果未能解决你的问题,请参考以下文章