Effective C++之十五

      主题:资源管理类中提供直接访问底层资源的机制。

 

      资源管理类能防止资源泄漏。理想情况下,我们均采用资源管理类与底层资源交互。但是,许多API需要直接访问底层资源,所以需要提供直接访问底层资源的机制。

 

      有两个方法将资源管理类转换为底层资源:显式转换(explicit conversion)和隐式转换(implicit conversion)。

 

      auto_ptr和shared_ptr都有一个get函数提供显式转换。有的程序采用隐式的转换函数,这样就不必到处调用get了,但是隐式转换的缺点是增加了错误的机会,Meyers举了复制Font对象被误写为复制底层Font句柄,可能导致资源释放后f2悬挂(dangle)的问题。

 

      通常情况下,优先考虑使用显示转换,因为它更安全。

 

      最后,Meyers指出:从资源管理类中返回底层资源破坏了封装原则,但是资源管理类的存在不是为了封装,而是为了确保资源被适时地释放,因此这不是错误的设计。

 

      附:两种隐式转换的方式:

      1) class Font {

          public:
               operator FontHandle() const { return f; }        // implicit convert from Font to FontHandle
          };

      2) class Font {

           public:

               Font(FontHandle fh) {.....}                               // implict convert from FontHandle to Font

          };

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值