provide access to raw resources in resource-managing classes
动机
在条款13中,我们使用智能指针去保存一个原始资源,但有些时候AP需要绕过诸如智能指针这类资源管理对象去获得原始资源,因此我们需要留下一个途径让API有机会去使用原始资源
方法
- get()方法
在shared_ptr和auto_ptr中都提供了一个get成员函数,用来显式地返回智能指针内部的资源
1 | int days = daysHeld(pInv.get())//shared_ptr<Investment> pInv |
- 提供隐式转换
1 | class Font{ |
在上述RAII类中,每次要使用原始资源,都必须要利用get()方法;因此我们可以提供一个隐式的转换
1 | class Font{ |
建议
- RAII类应该提供一个访问原始资源的接口,这虽然会破环类的封装,但因为RAII的目的是保证资源的正确释放,所以影响不大
- 对资源的访问可以通过显示转换或隐式转换,个人建议显式转换,比较安全