随笔 - 21  文章 - 0  trackbacks - 0
<2014年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿

随笔分类

随笔档案

文章分类

搜索

  •  

最新评论

阅读排行榜

评论排行榜

前面有一篇随笔记录使用智能指针来保证scope范围的资源始终得到释放。

http://www.cppblog.com/pizzx/archive/2014/07/04/207512.html

参考网上其他的实现,使用boost::function,boost/bind,lambda同样可以实现。

在 vs2010 下编译通过。


#include <stdio.h>
#include 
<boost/shared_ptr.hpp>
#include 
<boost/function.hpp>
#include 
<boost/noncopyable.hpp>
#include 
<boost/bind.hpp>


class scope_exit : private boost::noncopyable
{
    typedef boost::function
< void () >  EXFUNC;

public:
    scope_exit(EXFUNC func):m_tfunc(func), m_bdismiss(
false){}

    
~scope_exit()
    
{
        
if (!m_bdismiss)
        
{
            m_tfunc();
        }

    }


    
void setDismiss()
    
{
        m_bdismiss 
= true;
    }


private:
    EXFUNC      m_tfunc;
    
bool        m_bdismiss;
}
;



void closefile(FILE *p)
{
    fclose(p);
}



void test_func()
{
    FILE 
*= fopen("a.txt""w");


    scope_exit  se( [
&]  ()
                                

                                    fclose(p) ;
                                    p 
= NULL;
                                 }
 
                             );

//    scope_exit se( boost::bind(closefile, p));

    
if(1)
    
{
        
return;
    }

    
//fclose(p); 
}




int main()
{
    test_func();
    
return 0;
}

其中scope_exit 的构造函数参数可以使用boost::bind,也可以使用lambda表达,这里可见lambda表达式在写这类小函数体现出来的便利之处。

posted on 2014-08-11 17:41 pizzx 阅读(517) 评论(0)  编辑 收藏 引用 所属分类: c++/boost

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理