- APIS 往往要求访问原始资源,所以每一个
RAII class 应该提供一个取得其原始资源的方法
- 对原始资源的访问可能经由
显式转换
或隐式转换
。一般而言显式转换比较安全,但隐式转换对客户比较方便
资源管理类是对抗资源泄露的堡垒。但是由于许多 APIs 会直接使用资源,所以需要一个函数可将 RAII class 对象转换为其内含的原始资源,有两个做法可以达成目标:
显式转换
:提供一个成员函数返回原始资源
隐式转换
:提供一个隐式转换函数 “operator 原始资源类型()” 使资源管理类型能够隐式转换为原始资源类型
tr1::shared_ptr 和 auto_ptr 都提供一个 get 成员函数,用来执行显式转换,会返回其原始资源的副本。
tr1::shared_ptr 和 auto_ptr 也重载了 operator* 和 operator->,它们允许隐式转换至底部底部原始指针。
提供一个隐式转换函数会让客户使用时比较轻松自然,但是会增加出错的概率。我们应该遵循条款18的忠告:让接口容易被正确使用,不易被误用。因此通常情况下提供一个显式转换函数是比较受欢迎的。