条款 15:在资源管理类中提供对原始资源的访问
Provide access to raw resources in resource-managing classes.
int dausHeld(const Invectment*);
有些 API 会需要直接指涉资源,通常情况是参数为某对象指针,此时要求资源管理类能够返回原始资源的指针
资源管理类提供原始资源的指针,通常是 get() 函数,如 shared_ptr 和 auto_ptr 实现一般
对原始资源的转换由显示转换或者隐式转换来实现,一般显示转换比较安全,隐式转换比较方便单可能引起问题-
- 显示转换
class Font
{
public:
FontHandle get() const { return f; }
private:
FontHandle f;
}
- 隐式转换
class Font
{
public:
operator FontHandle() const { return f; }
private:
FontHandle f;
}
可能引起问题
Font f1(getFont());
...
FontHandle f2 = f1; // 原意是想拷贝 Font 对象,却反而将 f1 隐式转换为其底部的 FontHandle 然后才复制它