💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
## 条款15:在资源管理类中提供对原始资源的访问 Provide access to raw resources in resource-managing classes. 由于许多 APIs 直接指涉资源,例如: ```cpp std::tr1::shared_ptr<Investment> pInv(new Investment()); int deysHeld(const Investment* pi); ``` 所以资源管理类需要提供对原始资源的访问接口。引用计数型智慧指针和智能指针都提供一个 `get()` 成员函数,用来执行显示转换,它会返回智能指针内部的原始指针;并且也重载了指针取值(pointer dereferencing)和操作符(operator-&gt; 和 operator\*),它们允许转换至底部原始指针。 对于自定义的资源管理类,可以选择显式转换函数和隐式转换函数两种方式: ```cpp class Font { public: ... FontHandle get() const { return f; } // 显式转换; operator FontHandle() const { return f; } // 隐式转换; private: FontHandle f; }; // 隐式转换会增加错误发生的概率; Font f1(new FontHandle(); FontHandle f2 = f1; // 原意是要拷贝一个 Font 对象; ``` 一般而言显式转换比较安全,但隐式对客户比较方便。