资源管理

程序编程中,常面临的资源有内存的分配管理,但内存只是你必须管理的众多资源之一。其他常见的资源还包括文件描述器,互斥锁,图形界面中的字型和笔刷,数据库连接,以及网络socket资源。不论哪一种资源,重要的是,当你不再使用它时,必须将它还给系统。
这篇先讲述内存的分配与回收
这里写图片描述
这是常见的写法,但是若干情况下f可能无法删除它的指针对象,比如过早return,等等情况。单纯依赖”f总是会执行其delete语句“是行不通的。
为确保createInvestment返回的资源总是被释放,我们需要将资源放进对象内,当控制流离开f,该对象的析构函数会自动释放那些资源。实际上我们的想法是:把资源放进对象内,我们可以依赖C++的”析构函数自动调用机制“确保资源被释放。
许多资源被动态分配于heap内而后被用于单一区块或函数内。他们应该在控制流离开那个区块或函数时被释放。标准程序库提供的”auto_ptr“z正是针对这种形形势而设计的特制产品。auto_ptr是个”类指针(pointer-like)对象“,也就是所谓”智能指针“,其析构函数自动对其所指对象调用delete。使用auto_like的方法如下:

void f()
{
 std::auto_ptr<Investment> pInv(createInvestment());
...//经由auto_ptr的析构函数自动删除pInv
}

头文件包含#include
由于auto_ptr被销毁时会自动删除它所指之物,所以一定要注意别让多个auto_ptr同时指向同一对象,否则对象会被删除一次以上。为了预防这个问题,auto_ptr有一个性质:若通过copy构造函数或者copy assignment操作符复制它们,它们会变成null,而复制所得的指针将取得资源的唯一拥有权。
这里写图片描述
所以auto_ptr有其限制的使用范围,比如STL容器要求其元素发挥“正常的”复制行为,这些容器不得使用auto_ptr。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值