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

2021-10-01 19:09:06 字數 595 閱讀 5623

使用資源管理類來管理資源,使得我們不必直接處理資源,而交由類來管理,這很好。但是,有些api需要直接訪問資源,你不能給它傳遞乙個這樣的資源管理類物件。這就使得我們的資源管理類能夠解開類的封裝,能夠做到直接訪問資源。

需要乙個成員函式,將raii class物件轉換為其所內含的原始資源,可以通過兩種途徑:

(1)顯式轉換

情況一:通過指標訪問的資源。(直接資源訪問)

寫乙個成員函式get(),這個函式返回指向原始資源的指標。(shared_ptr 和auto_ptr都是這樣做的。)

情況二:非通過指標訪問的資源。(直接資源獲取)

寫乙個get() 成員函式,直接返回原始資源。

(2)隱式轉換

情況一:通過指標訪問的資源。(直接資源訪問)

直接把智慧型指標當成乙個指標使用,通過->*來訪問資源,當然這些符號都是被過載過的,他們都將智慧型指標轉換成了底部的指標。

情況二:非通過指標訪問的資源。(直接資源獲取)

寫乙個隱式轉換函式,將資源管理類物件轉換為資源。在需要資源的地方,傳遞資源管理物件即可。

根據工作場景而定。

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

對於資源管理類而言,有時候你需要處理原始資源 raw resources 的訪問。當你使用智慧型指標如auto ptr或tr1 shared ptr儲存資源類的時候。當你需要訪問智慧型指標指向的原始資源的時候,你有顯示轉換和隱式轉換兩個方法 顯示使用智慧型指標的get函式,隱式方法智慧型指標過載了指...

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

從條款13建立乙個智慧型指標 std shared ptr pinv creatinvestment 假設你希望某個函式處理investment物件 int daysheld const investment pi 然後想要這麼呼叫int days daysheld pinv 但是通不過編譯,因為d...

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

即使我們對一些資源使用了raii類進行管理,但是還是不能避免很多的api需要你去提供原始的資源來對他們進行呼叫 例如對於條款13中的例子來說 1 shardptrpinv createinvestment 2 看看下面這個函式 3int dayshold const investment pi 這裡...