条款15:在资源管理类中提供对原始资源的访问
Provide access to raw resources in resource-managing classes.
由于许多 APIs 直接指涉资源,例如:
std::tr1::shared_ptr<Investment> pInv(new Investment());
int deysHeld(const Investment* pi);
所以资源管理类需要提供对原始资源的访问接口。引用计数型智慧指针和智能指针都提供一个 get()
成员函数,用来执行显示转换,它会返回智能指针内部的原始指针;并且也重载了指针取值(pointer dereferencing)和操作符(operator-> 和 operator*),它们允许转换至底部原始指针。
对于自定义的资源管理类,可以选择显式转换函数和隐式转换函数两种方式:
class Font {
public:
...
FontHandle get() const { return f; } // 显式转换;
operator FontHandle() const { return f; } // 隐式转换;
private:
FontHandle f;
};
// 隐式转换会增加错误发生的概率;
Font f1(new FontHandle();
FontHandle f2 = f1; // 原意是要拷贝一个 Font 对象;
一般而言显式转换比较安全,但隐式对客户比较方便。
Last updated
Was this helpful?