乙個完美的類的建構函式應該這樣寫

2021-05-05 04:51:58 字數 856 閱讀 2677

1: 初始化效率要高效。

所有的成員變數初始化通過 初始化列表實現。

如果放在類的建構函式裡面初始化,效率會低!

因為:在進入類的建構函式之前,類必須是乙個已經構造好的類了!也就是,其內部成員變數也已經被構造好了。也就是進入建構函式之前所有的內部成員變數都已經執行了引數為空的構造(假設沒有用初始化列表)。

如果你實現了建構函式,那麼編譯器會生成呼叫建構函式的**,這裡的**已經不是構造了,變成了修改!

m_classb = _b; // 這裡執行的是 賦值運算,而不是copy建構函式。m_classb已經被構造起來了。

效率低顯而易見;

**驗證:

class sa

;int _i;

class f_sa

// 錯誤

//f_sa( int i=0 ):m_sa(i) // 正確

sa m_sa;

};int _tmain( int argc, tchar* argv )

2:防止在建構函式中資源洩漏。

見effective c++ 條款十 可以通過auto_ptr<>封裝的指標,就可以能自動資源**

3:如果構造失敗,應該向上跑出異常。

假設有乙個成員變數指標,通過初始化列表申請記憶體,那麼如果其失敗,其會自動丟擲異常向上傳遞。不用擔心《此刻注意條款2中的資源洩漏》

本地丟擲的異常必須本地處理,直接扔給外部的做法是不負責任的。本地處理後,視異常的情況和系統要求,再過濾給外部呼叫者,即客戶,後一動作稱為「上拋」。

上面這句話參見:http://blog.csdn.net/hikaliv/archive/2009/08/18/4460180.aspx

乙個完美的類的建構函式應該這樣寫

1 初始化效率要高效。所有的成員變數初始化通過 初始化列表實現。如果放在類的建構函式裡面初始化,效率會低!因為 在進入類的建構函式之前,類必須是乙個已經構造好的類了!也就是,其內部成員變數也已經被構造好了。也就是進入建構函式之前所有的內部成員變數都已經執行了引數為空的構造 假設沒有用初始化列表 如果...

乙個完美的導航樹

http bbs.xoyo.com forumdisplay.php?fid 4339 target main title 新手入門 高手高階,玩家遊戲經驗的交流區 http bbs.xoyo.com forumdisplay.php?fid 4700 target main title 精彩封神,...

乙個比較完美的spacer div技巧

在製作網頁的過程中,自適應問題是經常遇到,而又最讓人頭疼的,看了好多種解決的方法,但是都不是萬能的。今天遇到這個問題,實在讓我撓頭,借鑑了shark的方法,又給了我乙個新思路。當時沒仔細看lbs的樣式表,今天才發現,clear用的就是這個方法。接下來,我會做個關於 自適應高度 問題的彙總,以便今後遇...