條款17 以獨立語句將newed物件置入智慧型指標

2021-10-09 16:04:58 字數 907 閱讀 7904

考慮下面兩個函式

int

priority()

;void

processwidget

(std::shared_ptr pw,

int priority)

;

然後考慮呼叫processwidget

processwidget

(new widget,

priority()

);

但是無法通過編譯,因為無法將new widget的原始指標轉化為processwidget所要求的只能指標,解決辦法是將呼叫改寫為如下形式:

processwidget

(std::shared_ptr

(new widget)

,priority()

);

在呼叫processwidget函式體之前,編譯器必須建立**,做如下三件事:

執行new widget呼叫priority呼叫shared_ptr建構函式

則可能會出現對proority的呼叫異常,然後導致new widget返回的執行丟失,造成資源洩露,要避免這類問題辦法是分別寫出(1)建立widget,(2)將它置入只能指標內嗎,最後傳入processwidget函式內

std::shared_ptrpw(

new widget)

;// 在單獨語句內以只能指標

processwidget

(pw,

priority()

);

條款17 以獨立語句將newed 物件置入智慧型指標

考慮以下場景 假設我們有個函式用來顯示處理函式的優先權,另乙個函式 processwidget 用來在某動態分配所得的widget上進行某些帶有優先權的處理,函式介面如下 int priority void processwidget std tr1 shared ptr pw,int priori...

條款44 GotW 17 型別轉換(Casts)

問題 標準c 中新風格的轉換與舊風格的c轉換相比,具有更強大的功能和安全性。你對它了解多少?本條款中,使用如下的類和全域性變數。class a class b virtual private a struct c a struct d b,c a a1 b b1 c c1 d d1 const a ...

fedora17下以root登陸

以普通使用者登陸時,在進行一些檔案操作時,經常會遇到許可權不夠的問題,fedora又禁止以root使用者登陸,要以root登入按以下操作即可 1 在終端裡切換到root su root 然後輸入密碼 2 修改gdm password檔案 gedit etc pam.d gdm password 注釋...