《More Effective C++》+《Effective C++》,两本经典双剑合璧,必然威力无穷。
Item M9:使用析构函数防止资源泄漏
1. 隐藏在auto_ptr 后的思想是:用一个对象存储需要被自动释放的资源,然后依靠对象的析构函数来释放资源,这种思想不只是可以运用在指针上,还能用在其它资源的分配和释放上。
2. 资源应该被封装在一个对象里,遵循这个规则,你通常就能避免在存在异常环境里发生资源泄漏。
[如果使用指针操作堆内存产生了异常,已经申请了的内存将无法正确释放;而使用RAII可以在析构函数中释放]
Item M10:在构造函数中防止资源泄漏
1. C++确保删除空指针是安全的。
2. C++拒绝为没有完成构造操作的对象调用析构函数原因是:这么做是没有意义的,如果为没有完成构造操作的对象调用析构函数,析构函数如何去做呢?
仅有的办法是在每个对象里加入一些字节来指示构造函数执行了多少步,然后让析构函数检测这些字节并判断该执行哪些操作。这样的记录会减慢析构函数的运行速度,并使得对象的尺寸变大。C++避免了这种开销,但是代价是不能自动地删除被部分构造的对象。
3. 如果你用对应的auto_ptr对象替代指针成员变量,就可以防止构造函数在存在异常时发生资源泄漏,你也不用手工在析构函数中释放资源,并且你还能象以前使用非const 指针一样使用const指针,给其赋值。