条款 15:在资源管理类中提供对原始资源的访问

    Provide access to raw resources in resource-managing classes.

    1. int dausHeld(const Invectment*);

    有些 API 会需要直接指涉资源,通常情况是参数为某对象指针,此时要求资源管理类能够返回原始资源的指针
    资源管理类提供原始资源的指针,通常是 get() 函数,如 shared_ptr 和 auto_ptr 实现一般
    对原始资源的转换由显示转换或者隐式转换来实现,一般显示转换比较安全,隐式转换比较方便但可能引起问题

    显示转换

    1. class Font
    2. {
    3. public:
    4. FontHandle get() const { return f; }
    5. private:
    6. FontHandle f;
    7. }

    隐式转换

    1. class Font
    2. {
    3. public:
    4. operator FontHandle() const { return f; }
    5. private:
    6. FontHandle f;
    7. }

    可能引起问题

    1. Font f1(getFont());
    2. ...
    3. FontHandle f2 = f1; // 原意是想拷贝 Font 对象,却反而将 f1 隐式转换为其底部的 FontHandle 然后才复制它