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

2021-10-09 14:47:12 字數 1010 閱讀 1345

從條款13建立乙個智慧型指標:

std::shared_ptr

pinv

(creatinvestment()

);

假設你希望某個函式處理investment物件:

int

daysheld

(const investment* pi)

然後想要這麼呼叫int days = daysheld(pinv),但是通不過編譯,*因為dayshel需要的是investment 指標,但是傳過去的卻是乙個型別為std::shared_ptr的物件;解決辦法有兩個:顯式轉換:get成員函式

int days =

daysheld

(pinv.

get())

;

隱式轉換:考慮下面用於字型的raii class

fonthandle getfont()

;void

releasefont

(fonthandle fh)

;class

font

~font()

private

: fonthandle f;

};

假設有將font物件轉換為fonthandle這樣一種需求,乙個辦法是像get那樣提供顯式轉換

class

font

};

另乙個辦法就是提供隱式轉換函式:

class

font..

.};font f

(getfont()

);intnewfontsize()

;changfontsize

(f, newfontsize)

;// 將font隱式轉化為fonthandle

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

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

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

使用資源管理類來管理資源,使得我們不必直接處理資源,而交由類來管理,這很好。但是,有些api需要直接訪問資源,你不能給它傳遞乙個這樣的資源管理類物件。這就使得我們的資源管理類能夠解開類的封裝,能夠做到直接訪問資源。需要乙個成員函式,將raii class物件轉換為其所內含的原始資源,可以通過兩種途徑...

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

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