Effective C++之十三

本文探讨了在C++中采用对象管理资源的核心思想,并通过Meyers的Investment类示例介绍了几种资源泄漏的情况,包括提前返回、循环中断及异常引发的问题。提出了使用STL的auto_ptr和boost::scoped_ptr等智能指针作为解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     核心思想:采用对象管理资源。

 

     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。

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值