RAII

作者: 纵横而乐 | 来源:发表于2015-06-16 15:56 被阅读114次

听到这么高端霸气的名字顿觉自己极致土鳖,介是何方神圣呢,其全称是Resource Acquisition Is Initialization 其起源是为了完成异常安全资源管理的愿景。

RAII中资源的持有是与对象的生命周期完全吻合在一起的:资源分配在对象创建的时候完成,而在对象析构时完成资源的释放。只要对象适当地销毁,资源泄漏就不会发生。

示例代码如下:

RAII示例代码

上面这段代码是异常安全的,因为C++保证在enclosing作用域结束时,会销毁所有栈变量,可参考stack unwinding  ,不管是否发生异常lock和file对象在从当前函数中返回时会,它们的析构函数会被调用。局部变量使得在单个函数中进行多个资源的管理变得很简单:局部变量会按它们构造的反序进行析构,并且一个对象必须在完全构造(即构造的过程中没有发生异常)之后才会被销毁。

Stroustrup在比较RAII与java中的finally的时候放了狠话:现实中,资源获取的场景比资源的种类要多得多得多,所以RAII比finally结构用的代码会更少。

所以问题来了,异常发生的时候,怎样保证局部变量的析构呢?

另外动态分配的对象也可以由RAII机制控制,以便RAII对象(局部变量)析构时相应资源被释放。为了达到这个目的,可以使用C++11中定义的智能指针std::unique_ptr和std::shared_ptr,C++98中对应的是std::auto_ptr和boost中的boost::shared_ptr。

意外发现一个进阶的C机制

__attribute__机制

相关文章

  • C++ RAII

    什么是RAII ? RAII即“Resource Acquisition Is Initialization”,也...

  • C++中的RAII机制

    什么是RAII? RAII是Resource Acquisition Is Initialization(wiki...

  • RAII

    听到这么高端霸气的名字顿觉自己极致土鳖,介是何方神圣呢,其全称是Resource Acquisition Is I...

  • RAII

    写在前面的话 在google上搜索关键字RAII, 有二百多万条搜索结果。说明这个话题在网上已经被讨论过无数次,...

  • RAII

    前言 在写C++设计模式——单例模式的时候,在写到实例销毁时,设计的GC类是很巧妙的,而这一巧妙的设计就是根据当对...

  • RAII

    RAII,完整的英文是 Resource Acquisition Is Initialization,是 C++ ...

  • RAII技术

    解决这个问题也很简单,使用c++中常见的RAII技术,即获取资源即初始化(Resource Acquisition...

  • 资源管理 条款13:以对象管理资源

    总结: 为防止资源泄露,使用RAII对象管理资源,在构造函数中,获取资源,在析构函数中释放资源; 常用RAII c...

  • C++——• RAII

    转自:http://www.cnblogs.com/hsinwang/articles/214663.html R...

  • C++ smart pointers

    RAII original code example Let us therefore use the princ...

网友评论

      本文标题:RAII

      本文链接:https://www.haomeiwen.com/subject/ufksqttx.html