上一部分 Effective C++ --2 构造/析构/赋值运算

13、以对象管理资源

(1)为了防止new后提前return等没有执行delete造成内存泄露,利用RAII(resource acquisition is initialization,资源取得时便是初始化时机)对象。

(2)两个常被使用的RAII对象auto_ptr和tr1::shared_ptr。两者都是智能指针,其析构函数自动对其所指对象调用delete。前者有所有权的概念,复制等操作会有所有权的转移;后者支持RCSP(reference-counting smart pointer,引用计数型智能指针),通常是较佳选择,因为其copy比较直观。

14、在资源管理类中小心copying行为

(1)复制RAII对象进行的是深度拷贝,不论指针或是指针所指内存都被复制。

(2)普遍的RAII对象copying行为是:抑制copying、施行引用计数法。前者将copying操作声明为private;后者使用shared_ptr,还可以指定删除器,当引用计数为0时自动调用删除器。

15、在资源管理类中提供对原始资源的访问

(1)APIs往往要求访问原始资源,所以每一个RAII对象都应该提供一个“取得其所管理之资源”的方法。方法有两种:显式和隐式。显示通过get()得到;隐式提供隐式转换函数,将资源返回。

16、成对使用new和delete时采用相同的形式

(1)new 和delete(单个对象),new[] 和delete[](一组对象), 使用形式一致。

(2)不要对数组形式做typedefs动作,容易造成上述规则出错。(对数组做typedefs是为了用到相同类型和大小的数组时方便使用,最好不要这么做。)

17、以独立语句将newed对象置入智能指针

(1)分离语句,将newed对象置于智能指针内,否则一旦抛出异常,可能造成内存泄露。

Effective C++ --3 资源管理相关推荐

  1. Effective C++ 3nd笔记——资源管理

    Effective C++ 3nd---资源管理 以对象管理资源 简单来说就是要用类来管理资源,最好使用C++11新标准提供的几种智能指针 请记住: 为防止资源泄漏,请使用RAII对象,他们在构造函数 ...

  2. Effective C++ -- 零散知识点整理

    Effective C++ --1让自己习惯C++ Effective C++ --2构造/析构/赋值运算 Effective C++ --3资源管理 Effective C++ --4设计与声明 E ...

  3. Effective C++ --4 设计与声明

    上一部分Effective C++ --3 资源管理 18.让接口容易被正确使用,不易被误用 (1)设计接口时要考虑客户可能可能做出的错误输入,如参数的形式等. 19.设计class犹如设计type ...

  4. 读书笔记 来自网络

    2010年3月15日 # <深入解析MFC>笔记 12. 进程与线程 2009-10-7 ======================= <深入解析MFC>笔记 12. 进程与 ...

  5. Effective C# 第二章:.Net资源管理(翻译)

    Chapter 2. .NET Resource Management 第二章:.Net资源管理 一个简单的事实:.Net应用程序是在一个托管的环境里运行的,这个环境和不同的设计器有很大的冲突,这就才 ...

  6. [Effective C++ --014]在资源管理类中小心copying行为

    第一节 <背景> 条款13中讲到"资源取得的时机便是初始化时机"并由此引出"以对象管理资源"的概念.通常情况下使用std中的auto_ptr(智能指 ...

  7. 《Effective C++ 3th》——资源管理

    文章目录 资源如何释放? 注意资源的唯一性 由使用智能指针引出的问题 以对象管理资源 在资源管理类中小心coping行为 在资源管理类中提供对原始资源的访问 成对使用new和delete时要采取相同形 ...

  8. [Effective C++]条款14:在资源管理类中小心copying行为

    复制 RAII 对象必须一并复制它所管理的资源,所以资源的 copying 行为决定 RAII 对象的 copying 行为 普遍而常见的 RAII class copying 行为是:阻止 copy ...

  9. 《Effective C#》读书笔记——条目19:保证0为值类型的有效状态.NET资源管理

    .NET系统的默认初始化过程会将所有的对象设置为0.我们就会难免创建出一个初始化为0值的值类型,所以我们应该将0作为类型的默认值,可以避免一些不必要的Bug. 1.将0设置为枚举的有效值 使用枚举时我 ...

最新文章

  1. redis 数据结构 内存管理 持久化
  2. 【RS】Improving Implicit Recommender Systems with View Data - 使用浏览数据提升隐式推荐系统...
  3. c语言 二级菜单_收下计算机二级秘笈,考场上说好不哭!
  4. qt 实现拖动矩形角度_手机上如何使用CAD角度标注功能?
  5. ARM裸机篇--按键中断
  6. 【转载】各版本IIS下ASP.net请求处理过程(3)
  7. UCF转XDC工具说明文档
  8. IOS开发基础之屏幕组件适配添加约束
  9. 复练-软考网规-下午案例题考点和答题技巧
  10. 如何打开.hdx文件
  11. Oracle 11g 从入门到精通 视频教程——适合新手入门学习
  12. windows环境下定时进行阿里云DDNS解析
  13. 张子阳:如何在30岁前年薪超过30万
  14. 文心一言的魔性作图,我愣住了……
  15. AVUE 点击编辑按钮拉起弹窗前增加自己的操作
  16. 常用字节单位转化和字符中英文长度计算
  17. python rfcn.py
  18. 2019互联网公司月饼哪家强?吃完130个月饼,耗时3天,扶墙测评!
  19. Java实现员工管理系统
  20. gnome设置dvorak键盘布局

热门文章

  1. Python编程基础:第三十三节 文件复制Copy a File
  2. 蚂蚁金服11.11:支付宝和蚂蚁花呗的技术架构及实践
  3. 转变--一个平凡人的2017年总结及2018年展望
  4. Reactor by Example--转
  5. mysql 变量is null 和 not exists区别
  6. Linux服务器性能评估与优化--转
  7. Chromium:安装depot_tools及获取Chromium源代码
  8. jvm性能调优 - 17案例实战_每日上亿请求量的电商系统 老轻代垃圾回收参数如何优化
  9. Spring-常见问题25问
  10. 数据结构与算法笔记(二)—— 顺序表