13 以对象管理资源

条款- 13 以对象管理资源

Remember:

1- 为防止资源泄露,请使用 RAII(资源获取初始化) 对象,它们在构造函数中获得资源并在析构函数中释放资源。

2- 两个常被使用的 RAII class 分别是 tr1::shared_ptr 和 auto_ptr。前者通常是较佳选择,因为其 copy 行为比较直观。若选择 auto_ptr,复制动作会使它(被复制物)指向 null。

​ 所谓 资源 就是,一旦使用了它,将来就必须还给系统。C++ 最长用的就是动态分配内存,如果不释放的话,就会造成内存泄露。

​ 本条款针对的是所分配的 class 对象。

​ 常规做法:在使用完对象后就delete其对象。当代码数量较多的时候一般用函数进行封装。

但是这样会遇到一个问题:有时候还没来得及删除时,就遇到一个 return。这样就导致了内存泄露。

​ 解决方法:C++ 的“析构函数自动调用机制”。

​ 两种常用的只能指针: auto_ptr、tr1::shared_ptr。

​ 当正常地使用 析构函数自动删除的时候两个智能指针形式差不多。但是当使用复制行为进行赋null的时候,tr1::shared_ptr明显看着更舒服。

​ 【注】auto_ptr 和 tr1::shared_ptr 都是在析构函数内做 delete 而不是 deletep[]。那意味着在动态分配而得的 array 身上使用 auto_ptr或 shared_ptr是个馊主意。其实定义vector、string就可以代替array了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值