Effective C++ --3 资源管理

来源:互联网 发布:js里的on是什么意思 编辑:程序博客网 时间:2024/06/08 17:59

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

 

13、以对象管理资源

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

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

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

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

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

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

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

16、成对使用newdelete时采用相同的形式

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

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

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

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

0 0
原创粉丝点击