條款 15:在資源管理類中提供對原始資源的訪問

條款 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 然後才複製它
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章