天天看點

《Effective C++》條款15、資源管理類提供原始資源的通路

顯示轉換

在我們的資源管理類中,有時我們需要使用到我們的原始類,是以我們需要在資源管理類中提供對原始資源的通路接口,在智能指針中,都提供了一個get()函數,這個函數使得我們能夠獲得智能指針内部封裝的原始指針,同時智能指針也重載了*運算符和->運算符使得我們可以通路内部指針指向的資源。

如果我們在我們自己的資源管理類中也同樣的封裝了一個原始類,同樣的,我們需要提供我們的原始資源,對于一個字型的管理類。我們同樣可以提供一個get()函數傳回我們的原始資源。

《Effective C++》條款15、資源管理類提供原始資源的通路

如果想要獲得FontHandle類型的 f 對象,則我們寫一個get函數傳回 成員 f;

《Effective C++》條款15、資源管理類提供原始資源的通路

隐式函數轉換

《Effective C++》條款15、資源管理類提供原始資源的通路

上述的隐式函數轉換是一種函數文法格式,成員函數的一種,用于将本類型的函數轉換成為其他類型,其中的operator相當于一個标志符,說明該是一個隐式函數轉換。

operator 目标類型() {
    return 轉換類型對象;
}
           

使用方式:

《Effective C++》條款15、資源管理類提供原始資源的通路

f表示擷取調用隐式類型轉換。

但是當采用隐式類型轉換擷取底層的值将會增加出錯的幾率。

《Effective C++》條款15、資源管理類提供原始資源的通路

這将導緻兩個對象管理同一資源,當其中一個對象将資源釋放,則另一個資源将會懸空。

繼續閱讀