pizzx
C++博客
首页
新随笔
联系
聚合
管理
随笔 - 21 文章 - 0 trackbacks - 0
<
2014年7月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
c++/boost(21)
mongodb
随笔档案
2014年8月 (5)
2014年7月 (9)
2014年6月 (6)
2014年5月 (1)
文章分类
C/C++
LINUX
网络编程
搜索
最新评论
阅读排行榜
1. glog日志开源库使用小结(10313)
2. boost pool实现详解(5288)
3. boost noncopyable实现禁止类拷贝(3879)
4. float 大小比较(2906)
5. boost::circular_buffer的push_back分析(2661)
评论排行榜
1. boost::circular_buffer的push_back分析(0)
2. muduo网络库的一点小结 (0)
3. glog日志开源库使用小结(0)
4. log4cpp自带例子程序注解(0)
5. 对象申请释放内存池测试(0)
c++安全scope作用域释放资源二
前面有一篇随笔记录使用智能指针来保证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
*
p
=
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
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
c11 ravlue test example 1
float 大小比较
boost noncopyable实现禁止类拷贝
c++安全scope作用域释放资源二
operator new总结
observer模式
float和int转换拾入分析
vtable ptr解析
get weakptr point from this
boost bind 引用计数生命周期
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理