标签:struct 析构函数 很多 应该 代码 函数 请求 函数的参数 sizeof
/* 为了编写任意代码以在异常发生后执行清理工作, 人们曾经设计了很多"最终的"语言概念。 首先我们定义一个类,它在析构函数中执行任意操作。 */ 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!\n"; }); int var = 0; cout << "var = " << var << ‘\n‘; //嵌套的块: { var = 1; auto act2 = finally([&]{ cout << "finally!\n"; var = 7;}); cout << "var = " << var << ‘\n‘; }//调用act2 cout << "var = " << var << ‘\n‘; }//调用act1 /* 上述代码输出: var = 0 var = 1 finally! var = 7 Goodbye, Cruel world! */
标签:struct 析构函数 很多 应该 代码 函数 请求 函数的参数 sizeof
原文地址:https://www.cnblogs.com/lhb666aboluo/p/12807456.html