资源管理

程序编程中,常面临的资源有内存的分配管理,但内存只是你必须管理的众多资源之一。其他常见的资源还包括文件描述器,互斥锁,图形界面中的字型和笔刷,数据库连接,以及网络socket资源。不论哪一种资源,重要的是,当你不再使用它时,必须将它还给系统。
这篇先讲述内存的分配与回收
资源管理_第1张图片
这是常见的写法,但是若干情况下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。

你可能感兴趣的:(资源管理)