Effective C++ 第十五條 Provide access to raw resource in resource-ma
在資源管理類中提供對原始資源的訪問
????????在前面說過,我們要用資源管理類來實現(xiàn)資源管理,主要是為了在程序結(jié)束的時候能夠釋放資源不會導(dǎo)致內(nèi)存泄漏。這意味著即使我們使用類封裝了原始資源,但還是需要在類中設(shè)計 API 給用戶調(diào)取原始資源,雖然用戶不一定要使用,但開發(fā)者應(yīng)當(dāng)提供。
像這樣就把資源 rhs 使用類 ptr 保護起來了,但是這還不夠,因為在很多時候,用戶需要調(diào)取資源 rhs,所以我們需要設(shè)計 API 給用戶使用??紤]到用戶需求,通常有以下幾個問題:
1.用戶使用的函數(shù)需要的參數(shù)以及返回值都是 T ,而封裝在 ptr 中的資源類型變成了 ptr,原來的函數(shù)用不了了,所以要設(shè)計類型轉(zhuǎn)換接口給用戶,讓用戶通過 ptr 類型獲得 T 類型的資源。 當(dāng)前有如下情況
現(xiàn)在該如何通過 callInt 來使用 ptr 封裝的 int* 作為參數(shù)呢?
顯式轉(zhuǎn)換
隱式轉(zhuǎn)換
隱式轉(zhuǎn)換看起來方便很多,但是也有其他問題,比如在客戶需要 ptr 類型的時候,拷貝 ptr 結(jié)果得出來的是 T 。這里可能注意,類的類型 和 operator T* () 的類型可以不一樣,比如類的類型是T,你可以在運算符重載那聲明為 operator double* () const,這樣不論創(chuàng)建 ptr 對象的時候給的是什么類型,都可以返回 double 型指針。
2.運算符重載 operator* 和 operator→
此時可以直接通過調(diào)用 ptr 來調(diào)用內(nèi)部原始資源。