Effective C++读书笔记3(资源管理)

◆条款13  以对象管理资源
以对象管理资源,可以在释放对象时经由 析构函数来释放该对象所占用的资源,经此来防止内存泄漏。根据这原则,获得资源后立刻放进管理对象。⇒RAII("Resource Acquisition IS Initialization.")
可以用智能指针来防止忘记delete,但STD的auto_ptr的复制行为很奇怪,复制的源会被置为NULL,BOOST的shared_ptr则没有这个问题。

◆条款14  在资源管理类中小心coping行为
有些在资源管理类中被管理的资源在拷贝(拷贝构造函数,拷贝赋值函数)后可能呈现出意想不到的结果,比如管理一个锁,拷贝时就又加了一次锁,所以需要小心考虑两个拷贝函数的实现。可以通过禁止拷贝或者对资源使用进行计数来管理此类资源。

◆条款15  在资源管理类中提供对原始资源的访问
经常需要直接访问一个资源管理类管理的原始资源,可以通过提供一个get方法,或者经由隐式类型转换来实现,一般来说前者较安全。

◆条款16  成对使用new和delete要采取相同形式
new出来的数组delete时要用 delete [ ],所以最好尽量不要对数组形式做typedef动作,因为很可能忘记它的数组属性。

◆条款17  以独立语句将newed对象置入智能指针
智能指针的初始化必须放在单独语句中执行,尤其不能放在函数参数里作为参数来初始化,因为有可能别的参数异常导致该指针无法释放。

这五个条款中心思想是将资源纳入类的管理范围内来,以此来管理资源的初始化和释放过程,其中析构函数扮演了很重要的角色,因为析构函数永远都会被最后调用的。智能指针也可以管理这些资源,但是效率会差一点,看如何平衡了,从项目经验上来看,制定一套不依赖编译器的编程法则或许也是不错的方式,看起来很高明的设计往往会很难看懂,太依赖于程序员的能力。而编程法则能很简单的由Review时同事指出问题。

★大的项目里可以定制一整套内存使用法则,建立能控制heap内存的管理类,其实就是定制new和delete。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值