Effective第三章

1.       为防止内存泄露,请使用RAII对象,他们在构造函数中获得资源并在析构函数中释放资源。

两个常被使用的RAII classes分别是trl::shared_ptrstd::auto_ptr;前者通常是较好的选择,因为其COPY行为比较直观。若选择auto_ptr,复制动作会使他(被复制物)指向NULL

注意上面两个指针都是负责管理堆上的资源。

2.       以独立语句将newed对象存储于(置于)智能指针内。如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄露。

Process(std::trl::shared_ptr<widget>(new widget)  ,  priority()   );

从上面我们知道有这样的三个操作:

(1)         New widget

(2)         Priority();

(3)         调用trl::shared_ptr构造函数

我们只知道(1)肯定在(3)前面,但是至于(2)究竟在什么时候被调用,则不一定,所以当(2)出现异常时,可能1的指针将会丢失。

为了避免这样的情况,将其分离出来

std::trl::shared_ptr<widget>            pw (new widget)

 

process(pw,priority());

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值