条款15:在资源管理类中提供对原始资源的访问
2015-10-06 09:49
267 查看
即使我们对一些资源使用了RAII类进行管理,但是还是不能避免很多的API需要你去提供原始的资源来对他们进行调用:
例如对于条款13中的例子来说:
所以说类似shared_ptr这样的RAII类都提供一个get函数,让用户可以自由的取得内部真正的资源(的副本),通过这个get函数上面API的使用可能就变成了下面这样:
如果觉得get可能使用起来非常的的别扭的话,甚至可以提供一个operator()来进行隐式的转换,但是隐式的转换过程中可能会产生意想不到的错误,所以到底是使用隐式的operator()还是get函数就见仁见智了,
PS:这里可不可以使用explicit operator(),这样是不是不get函数稍微好一点,而且安全性也较高。
最后一句说了:get可能还是要好一点,良好的class的设计准则是隐藏客户不需要看的部分,而且又将用户所有需要的东西都准备妥当,就像这里的get函数一样
例如对于条款13中的例子来说:
shardPtr<Investment> pInv(createInvestment); //看看下面这个函数 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函数一样
相关文章推荐
- 弱校联萌十一大决战之厉兵秣马B. Building for UN poj3566
- Python linux 下的python调试
- 修改linux shell 提示符
- 策略模式
- 条款14:在资源管理类中小型coping的行为
- 《机器学习》__note3
- c# 事件学习
- 获取当前时间
- 用service实现音乐播放器
- 使用enca
- UVA_10935: Throwing cards away I
- div 块跟随 鼠标点击
- Android Listview with different layout for each row
- include""和include<>的区别
- 原装win8系统电脑崩溃问题解决
- 互相关系数cross correlation-自相关系数-时间序列,图像
- QT5 学习之路27---渐变
- iOS KVO观察数组
- LocationManager定位
- python 模块 之 os