转载

RAII

编辑

RAII,也称为“资源获取就是初始化”,是c++等编程语言常用的管理资源、避免内存泄露的方法。它保证在任何情况下,使用对象时先构造对象,最后析构对象。

目 录

1RAII简介

2RAII的分类

3RAII实际应用

4RAII与STL容器

1RAII简介

RAII[1](Resource Acquisition Is Initialization),也成为“资源获取就是初始化”,是C++语言的一种管理资源、避免泄漏的惯用法。C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。简单的说,RAII 的做法是使用一个对象,在其构造时获取资源,在对象生命期控制对资源的访问使之始终保持有效,最后在对象析构的时候释放资源。

2RAII的分类

根据RAII[2]对资源的所有权可分为常性类型和变性类型,代表者分别是boost:shared_ptr<>[2]和std::auto_ptr<>;从所管资源的初始化位置上可分为外部初始化类型和内部初始化类型。
常性类型是指获取资源的地点是构造函数,释放点是析构函数,并且在这两点之间的一段时间里,任何对该RAII类型实例的操纵都不应该从它手里夺走资源的所有权。变性类型是指可以中途被设置为接管另一个资源,或者干脆被置为不拥有任何资源。外部初始化类型是指资源在外部被创建,并被传给RAII实例的构造函数,后者进而接管了其所有权。boost:shared_ptr<>和std::auto_ptr<>都是此类型。与之相对的是内部初始化类型。
其中,常性且内部初始化的类型是最为纯粹的RAII形式,最容易理解,最容易编码。

3RAII实际应用

};
}

4RAII与STL容器

{
};
{
};

RAII (Resource Acquirement Is Initialization)相关推荐

  1. RAII(Resource Acquisition Is Initialization:资源获取即初始化)

    1.裸指针,操作不当导致,空悬指针(指针所指向的资源已经被释放,但是指针未置空),内存泄漏,重复释放 2.栈展开的过程中不会自动释放 3.应用RAII技巧,将裸指针换为智能指针(是一个类),将指针转为 ...

  2. Resource Acquisition Is Initialization

    RAII,全称资源获取即初始化(英语:Resource Acquisition Is Initialization),它是在一些面向对象语言中的一种惯用法. RAII源于C++,在Java,C#,D, ...

  3. 网络资源的初始化与释放(C++ RAII惯用法)

    1. 网络资源的初始化与释放(C++ RAII惯用法) C++ RAII 惯用法 RAII (Resource Acquisition Is Initialization)资源获取即初始化 我们拿到资 ...

  4. C++核心准则E.6:使用RAII防止资源泄露

    E.6: Use RAII to prevent leaks E.6:使用RAII防止资源泄露 Reason(原因) Leaks are typically unacceptable. Manual ...

  5. RAII技术与智能指针(超详细)

    RAII技术与智能指针 RAII技术与智能指针 RAII技术 什么是RAII技术 实现原理 特征 作用 值语义与对象语义的区分 RAII代码格式 测试代码(Computer类的实现) 结论 智能指针 ...

  6. c语言 raii 用法日志,RAII 妙用之 ScopeExit

    原标题:RAII 妙用之 ScopeExit 什么是RAII Resource Acquisition Is Initialization, 资源获取即初始化,将资源的生命周期与一个对象的生命周期绑定 ...

  7. Go语言资源自动回收技术

    2019独角兽企业重金招聘Python工程师标准>>> Go语言作为一个现代化的编程语言以及支持垃圾内存的自动回收特性(GC). 我们现在关注的是非内存资源的自动回收技术. 局部资源 ...

  8. blob转file对象_C++核心准则C.41:构造函数生成的对象应该被完全初始化

    C.41: A constructor should create a fully initialized object C.41构造函数生成的对象应该被完全初始化 Reason(原因) A cons ...

  9. [转]C++ 11 多线程--线程管理

    转载地址:https://www.cnblogs.com/wangguchangqing/p/6134635.html 说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段.并 ...

最新文章

  1. 在Elasticsearch中对 text 类型的字段进行聚合异常Fielddata is disabled,Set fielddata=true
  2. 《博客园精华集》Sharepoint+MOSS分册第2轮筛选结果文章列表
  3. 中国房地产官媒爆乐视投资国贸地产,布局AI智能家居生态
  4. 买卖股票类问题动态规划解法(Leetcode题解-Python语言)
  5. 配置文件bashrc与profile的区别
  6. 自动量程万用表的实现原理_电子元器件用指针万用表、数字万用表、自动量程万用表测量原理图解大全教会您怎么看与测的呢?...
  7. 三星2610打印机故障INTERNAL ERROR - Incomplete Session by time out
  8. 梦三国则么修改服务器时间,梦三国如何窗口,梦三国设置
  9. 计蒜客 青出于蓝胜于蓝 dfs序+树状
  10. BLDC无刷电机驱动板,foc驱动板,有霍尔接口,反电动势接口,三相电流采集接口
  11. 上网课的心得体会1000字_上网课的感受作文600字
  12. 信息学奥赛一本通C++语言——1183:病人排队
  13. 电动车、船等 机械结构DIY
  14. RedHat / Centos   Linux 系统运维与管理实践技巧荟萃,持续更新
  15. MMKV:微信团队开源的轻量级存储方案
  16. Android Studio一直停留在MyApplication:syncing(解决方案)
  17. [洛谷P4233]射命丸文的笔记
  18. 【经济学_01】通货膨胀 投资陷阱
  19. 向新而生保业务增长,亚信科技持续锻造“核心引擎”
  20. 2017年迄今最新人工智能资源盘点

热门文章

  1. 5G时代,云计算发展的五大新趋势
  2. 启动三个线程,线程1打印1-5,线程2打印6-10,线程3打印11-15,接着线程1打印16-20……依此类推,打印到72.
  3. python unicode编码转换中文_python实现unicode转中文及转换默认编码的方法
  4. 游戏感:虚拟感觉的游戏设计师指南——第一章 定义游戏感
  5. 论文写作——用excel和ppt做好看的论文图
  6. 【luogu P2455 [SDOI2006]线性方程组】 题解
  7. JavaScript设计模式之策略模式(学习笔记)
  8. 3dmax转化html,VRayMtl Converter材质转换3dsmax插件V3.97版
  9. SQL server查询出只选修两门课程的学生学号和姓名
  10. 【HDU 6656】Kejin Player