资源管理之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的主要内容,如果未能解决你的问题,请参考以下文章

JAVA09异常处理之动手动脑问题

在内部片段类中使用ListView

Final Cut Pro X中的音视频片段如何自由拖动?

Java之String相关内容详解(字符串和字符串常量池)面试题

Java 之 IO 异常的处理了解

Java学习个人备忘录之关键字final