《Effective C++》学习笔记条款15 在资源管理类中提供对原始资源的访问

条款 15 :在资源管理类中提供对原始资源的访问

          前几个条款提到的资源管理类很棒。它们是你对抗资源泄漏的堡垒。但这个世界并不完美,许多 APIs 直接指涉资

源,这时候我们需要直接访问原始资源。
       

      这时候需要一个函数可将RAII对象(如tr1::shared_ptr)转换为其所内含之原始资源。有两种做法可以达成目

标:显示转换隐式转换
    

       tr1::shared_ptrauto_ptr都提供一个get成员函数,用来执行显示转换,也就是返回智能指针内部的原始指针

(的复件)。就像所有智能指针一样, tr1::shared_ptrauto_ptr也重载了指针取值操作(operator>operator*),

它们允许隐式转换至底部原始指针。(即在对智能指针对象实施->*操作时,实际被转换为被封装的资源的指针。)
   
 

class Font 
    {
        public:
 
        ...
 
       FontHandle get() const        //FontHandle 是资源;    显示转换函数
       { 
           return f; 
       }
       
 operator FontHandle() const        //隐式转换    这个值得注意,可能引起“非故意之类型转换”
       { 
           return f; 
       } 
        ...
 
    };
 
   

       是否该提供一个显示转换函数(例如get成员函数)将RAII类转换为其底部资源,或是应该提供隐式转换,答案主

要取决于RAII类被设计执行的特定工作,以及它被使用的情况。

    

      显示转换可能是比较受欢迎的路子,但是需要不停的getget;而隐式转换又可能引起非故意之类型转换
   
 

请记住:

        APIs往往要求访问原始资源,所以每一个RAII类应该提供一个“取得其所管理之资源”的方法。

         

         对原始资源的访问可能经由显示转换或隐式转换。一般而言显示转换比较安全,但隐式转换对客户比较方便。 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ccwRadar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值