条款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