從條款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 這裡...