核心思想:采用对象管理资源。
Meyers通过Investment类说明了3种因没有delete造成资源泄漏的情况:
1) delete前return了
2) cretaeInvesetment和delete在循环中,在循环中某处continue、break或goto了
3) delete前发生了异常。
可以采用stl的auto_ptr解决该问题,boost::scoped_ptr更合适。两个关键点是:
1) 获取资源后立即转化为资源管理对象,通常称为Resource Acquisition Is Initialization (RAII)
2) 在资源管理对象的析构函数中释放资源。
不能有多个auto_ptr管理同一资源,这样会造成多次释放资源的问题。为此,auto_pt有一个不寻常的特性,在copy构造和copy函数中,转移资源的所有权(ownership)。
auto_ptr的一个替代方案是引用计数智能指针(reference-counting smart pointer ),tr1:shared_ptr就是这样的类。注意,auto_ptr和shared_ptr析构函数中均使用delete,故对动态数组需使用boost:scoped_array或boost::shared_array。