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

即使我们对一些资源使用了RAII类进行管理,但是还是不能避免很多的API需要你去提供原始的资源来对他们进行调用:
例如对于条款13中的例子来说:

1 shardPtr<Investment> pInv(createInvestment);
2 //看看下面这个函数
3 int daysHold(const Investment * pi);//这里我们所需要的就是提供原始的资源

所以说类似shared_ptr这样的RAII类都提供一个get函数,让用户可以自由的取得内部真正的资源(的副本),通过这个get函数上面API的使用可能就变成了下面这样:

...
int ans = daysHold(pInv.get());
如果觉得get可能使用起来非常的的别扭的话,甚至可以提供一个operator()来进行隐式的转换,但是隐式的转换过程中可能会产生意想不到的错误,所以到底是使用隐式的operator()还是get函数就见仁见智了,
PS:这里可不可以使用explicit operator(),这样是不是不get函数稍微好一点,而且安全性也较高。
 
最后一句说了:get可能还是要好一点,良好的class的设计准则是隐藏客户不需要看的部分,而且又将用户所有需要的东西都准备妥当,就像这里的get函数一样

转载于:https://www.cnblogs.com/-wang-cheng/p/4856730.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值