注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

widebright的个人空间

// 编程和生活

 
 
 

日志

 
 

C++ 的RAII 和 facebook folly库里面的 ScopeGuard  

2013-05-30 10:35:40|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天留意到facebook的folly库里面有一个  ScopeGuard的类。

https://github.com/facebook/folly/blob/master/folly/ScopeGuard.h


现在很流行这种新潮的用法。如果想试试,可以直接把这个模板类拿来使用吧。应该支持的c++ 11里面的Lambda  auto等用法,不用再自己写了。


2000年的时候Andrei Alexandrescu and Petru Marginean就有这篇文章提到这个ScopeGuard类的用法了。

Generic: Change the Way You Write Exception-Safe Code — Forever

http://www.drdobbs.com/cpp/generic-change-the-way-you-write-excepti/184403758

facebook这个跟这个文章里面的代码接口都一样的啊。


不过boost里面我知道shared_ptr 也是只是custom delete的用法的,可以用来做类似的功能。

参考boost smart pointer的文档

http://www.boost.org/doc/libs/1_53_0/libs/smart_ptr/smart_ptr.htm

还有Boost.ScopeExit 应该也是做类似的东西的。

http://www.boost.org/doc/libs/1_53_0/libs/scope_exit/doc/html/index.html


新的std里面的shared_ptr 之类的也有类似的功能?


不过让我选我还是选这个facebook 的ScopeGuard吧。这种场合下shared_ptr的复杂了?

说是shared_ptr 的原子操作? 性能要慢一些,能使用scope_ptr的情况下就尽量使用scope_ptr吧,

shared_ptr好处就是支持多个地方的贡献还有就是可以放到标准的std 容器。不过scope_ptr适合的场合下,scope_ptr性能更好吧。


以后也尽量的使用现代c++编程风格吧。 RAII (Resource Acquisition Is Initialization) 之类的。

这个ScopeGuard 不错,可以考虑一下。


  评论这张
 
阅读(519)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017