您的位置:首页 > 其它

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

2015-10-06 09:49 267 查看
即使我们对一些资源使用了RAII类进行管理,但是还是不能避免很多的API需要你去提供原始的资源来对他们进行调用:
例如对于条款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函数一样
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: