Effective C++ --3 资源管理

上一部分 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时采用相同的形式

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值