我发现,第一遍读书总是不能清楚的认识到问题的本质,我们还需要回过头去总结,因此,我决定以后每读一部分的书,写一点的总结,一方面可以让自己整理知识,另一方面方便以后对比思想。
资源管理
前言
资源泄露就是程序中常见的事情,这一章主要就是告诉我们如何去消除资源管理问题,值得注意的是,这里的资源不仅是指动态分配内存,其他常见的资源还包括数据库的连接,网络sockets,还有互斥锁等,我们在用完这些资源之后,必须将他们还给系统。尤其是发生异常、程序员维护软件时,会产生这种问题。
条款13:以对象管理资源
先看段代码:
[cpp]
void test()
{
int *t = new int;//获取资源
…
delete t;//释放资源
}
如果我们在"…"中产生了异常,或者存在return,就可能导致资源的泄露。也许你会说,我很谨慎,我不会让自己的代码出现这种问题。好吧,那如果这是一个项目,之后这段代码可能会被维护人员修改,他可能会在"…"中加入异常,或者return.也许,你又会说,你会将这段代码需要注意的地方写入文档,可是我觉得我们应该把自己当成"客户"(这里指使用这段代码和维护代码的人),我们需要为自己着想,如果我们能做好,就不应该甩手把麻烦的事情留给别人。
为防止以上的现象,我们可以将资源放入对象中,依赖c++的"析构函数自动调用机制"确保资源被释放。
[cpp]
void test
{
auto_ptr<int> t (new int);//注意初始化方式
…
}//auto_ptr的析构函数自动delete t
auto_ptr是个只能指针,析构函数会自动对其所指的对象调用delete.
书中推荐使用auto_ptr和shared_ptr(我在这里就不在介绍这个,有兴趣的可以自己google),但是我们也可以自己写资源管理类,但是其中涉及到需要考虑的细节,将在后面的条款讨论。