[Effective C++]条款15:在资源管理类中提供对原始资源的访问

  • APIS 往往要求访问原始资源,所以每一个 RAII class 应该提供一个取得其原始资源的方法
  • 对原始资源的访问可能经由显式转换隐式转换。一般而言显式转换比较安全,但隐式转换对客户比较方便

资源管理类是对抗资源泄露的堡垒。但是由于许多 APIs 会直接使用资源,所以需要一个函数可将 RAII class 对象转换为其内含的原始资源,有两个做法可以达成目标:

显式转换:提供一个成员函数返回原始资源

隐式转换:提供一个隐式转换函数 “operator 原始资源类型()” 使资源管理类型能够隐式转换为原始资源类型

tr1::shared_ptr 和 auto_ptr 都提供一个 get 成员函数,用来执行显式转换,会返回其原始资源的副本。

tr1::shared_ptr 和 auto_ptr 也重载了 operator* 和 operator->,它们允许隐式转换至底部底部原始指针。

提供一个隐式转换函数会让客户使用时比较轻松自然,但是会增加出错的概率。我们应该遵循条款18的忠告:让接口容易被正确使用,不易被误用。因此通常情况下提供一个显式转换函数是比较受欢迎的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值