條款 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 然後才複製它