[ECPP讀書筆記 條目39] 審慎使用私有繼承
·與組合不同,私有繼承可以啟用“空基類優化”特性。對于類庫開發人員而言,私有繼承對于降低對象尺寸來說至關重要。 閱讀全文
posted @ 2012-10-12 23:39 ★ROY★ 閱讀(2002) | 評論 (0) 編輯
隨筆 - 45, 文章 - 0, 評論 - 172, 引用 - 0
|
Effective C++[ECPP讀書筆記 條目39] 審慎使用私有繼承
摘要: ·私有繼承意味著“A以B的形式實現”。通常它的優先級要低于組合,但是當派生類需要訪問基類中受保護的成員,或者需要重定義派生的虛函數時,私有繼承還是有其存在的合理性的。
·與組合不同,私有繼承可以啟用“空基類優化”特性。對于類庫開發人員而言,私有繼承對于降低對象尺寸來說至關重要。 閱讀全文 posted @ 2012-10-12 23:39 ★ROY★ 閱讀(2002) | 評論 (0) 編輯 [ECPP讀書筆記 條目38] 使用組合來表示“A包含B”、“A以B的形式實現”
摘要: 組合與公共繼承之間存在著本質區別。
組合在應用域意味著“A是B”,在實現域意味著“A以B的形式實現”。 閱讀全文 posted @ 2012-07-08 16:18 ★ROY★ 閱讀(1988) | 評論 (2) 編輯 [ECPP讀書筆記 條目37] 避免對函數中繼承得來的默認參數值進行重定義
摘要: 避免在對函數中繼承得來的默認參數值進行重定義,這是因為默認參數值是靜態綁定的,而虛函數是動態綁定的。 閱讀全文
posted @ 2012-05-20 11:21 ★ROY★ 閱讀(2116) | 評論 (0) 編輯 [ECPP讀書筆記 條目36] 避免對派生的非虛函數進行重定義
摘要: 避免對派生的非虛函數進行重定義 閱讀全文
posted @ 2011-12-30 22:53 ★ROY★ 閱讀(2274) | 評論 (1) 編輯 [ECPP讀書筆記 條目35] 虛函數的替代方案
摘要: 在你為當前的問題設計解決方案時,不妨考慮一下虛函數以外的其他替代方案。 閱讀全文
posted @ 2011-12-25 00:59 ★ROY★ 閱讀(3252) | 評論 (2) 編輯 [ECPP讀書筆記 條目34] 區分清接口繼承和實現繼承
摘要: 接口繼承與實現繼承存在著不同。在公共繼承體系下,派生類總是繼承基類的接口。
純虛函數要求派生類僅繼承接口。 簡單(非純)虛函數要求派生類在繼承接口的同時繼承默認的實現。 非虛函數要求派生類繼承接口和強制內容的實現。 閱讀全文 posted @ 2008-07-06 22:58 ★ROY★ 閱讀(2614) | 評論 (3) 編輯 [ECPP讀書筆記 條目33] 避免隱藏繼承而來的名字posted @ 2008-05-01 01:11 ★ROY★ 閱讀(2729) | 評論 (2) 編輯 [ECPP讀書筆記 條目32] 確保公共繼承以“A是一個B”形式進行
摘要: 公共繼承意味著“A是一個B”的關系。對于基類成立的一切都應該適用于派生類,因為派生類的對象就是一個基類對象。 閱讀全文
posted @ 2008-03-17 22:55 ★ROY★ 閱讀(2067) | 評論 (2) 編輯 [ECPP讀書筆記 條目31] 盡量減少文件間的編譯依賴posted @ 2008-01-01 01:37 ★ROY★ 閱讀(2137) | 評論 (7) 編輯 [ECPP讀書筆記 條目30] 深入探究內聯函數
摘要: 僅僅對小型的、調用頻率高的程序進行內聯。這將簡化你的調試操作,為底層更新提供方便,降低潛在的代碼膨脹發生的可能,并且可以讓程序獲得更高的速度。
不要將模板聲明為inline的,因為它們一般在頭文件中出現。 閱讀全文 posted @ 2007-11-18 23:27 ★ROY★ 閱讀(1596) | 評論 (1) 編輯 [ECPP讀書筆記 條目29] 力求代碼做到“異常安全”
摘要: 異常安全的函數即使在異常拋出時,也不會帶來資源泄露,同時也不允許數據結構遭到破壞。這類函數提供基本的、增強的、零異常的三個層面的異常安全保證。
增強保證可以通過復制并交換策略來實現,但是增強保證并不是對所有函數都適用。 函數所提供的異常安全保證通常不要強于其調用的函數中保證層次最弱的一個。 閱讀全文 posted @ 2007-10-04 21:53 ★ROY★ 閱讀(1467) | 評論 (5) 編輯 [ECPP讀書筆記 條目28] 不要返回指向對象內部部件的“句柄”
摘要: 避免返回指向對象內部部件的句柄(引用、指針或迭代器)。這樣做可以增強封裝性,幫助const成員函數擁有更加“const”的行為,并且使“野句柄”出現的幾率降至最低。 閱讀全文
posted @ 2007-09-23 23:25 ★ROY★ 閱讀(1159) | 評論 (2) 編輯 [ECPP讀書筆記 條目27] 盡量少用轉型操作
摘要: 盡可能避免使用轉型,尤其是在對性能敏感的代碼中不要使用動態轉型dynamic_cast。如果一個設計方案需要使用轉型,要嘗試尋求一條不需要轉型的方案來取代。
在必須使用轉型時,要嘗試將其隱藏在一個函數中。這樣客戶端程序員就可以調用這些函數,而不是在他們自己的代碼中使用轉型。 要盡量使用C++風格的轉型,避免使用懷舊風格的轉型。現代的轉型更易讀,而且功能更為具體化。 閱讀全文 posted @ 2007-09-13 22:27 ★ROY★ 閱讀(1345) | 評論 (3) 編輯 [ECPP讀書筆記 條目26] 定義變量的時機越晚越好
摘要: 定義變量的時機越晚越好。這可以提高程序的清晰度和工作效率。
閱讀全文 posted @ 2007-08-19 22:00 ★ROY★ 閱讀(1174) | 評論 (0) 編輯 [ECPP讀書筆記 條目25] 最好不要讓swap拋出異常
摘要: swap是一個非常有趣的程序。它最早是作為STL的一部分引入C++的,而后就成為了異常安全編程的主體內容,另外對于可以自賦值的對象而言它還是一個常用的復制處理機制。由于swap如此神通廣大,那么以一個恰當的方式去實現它就顯得十分重要了,但是它的舉足輕重的地位也決定了實現它并不是一件手到擒來的事情。在本小節中,我們就會針對swap函數展開探索,逐步掌握如何去駕馭它。
閱讀全文 posted @ 2007-08-02 22:05 ★ROY★ 閱讀(1427) | 評論 (3) 編輯 [ECPP讀書筆記 條目24] 當函數所有的參數需要進行類型轉換時,要將其聲明為非成員函數
摘要: 如果你需要對一個函數的所有參數進行類型轉換,那么它必須是一個非成員函數。 閱讀全文
posted @ 2007-07-05 23:23 ★ROY★ 閱讀(1234) | 評論 (1) 編輯 [ECPP讀書筆記 條目23] 多用非成員非友元函數,少用成員函數
摘要: 在特性情況下要更趨向于使用非成員非友元函數,而不是成員函數。這樣做可以增強封裝性,以及包裝的靈活性和功能擴展性。
閱讀全文 posted @ 2007-06-11 22:27 ★ROY★ 閱讀(1172) | 評論 (0) 編輯 [ECPP讀書筆記 條目22] 將數據成員聲明為私有的
摘要: 要將數據成員聲明為私有的。這樣可以讓客戶端訪問數據時擁有一致的語義,提供有條不紊的訪問控制,強制類符合一致性,為類作者提供更高的靈活性。
protected并不會帶來比public更高的封裝性。 閱讀全文 posted @ 2007-06-06 18:37 ★ROY★ 閱讀(1014) | 評論 (0) 編輯 [ECPP讀書筆記 條目21] 在必須返回一個對象時,不要去嘗試返回一個引用
摘要: 不要返回一個指向局部的、分配于棧上的對象;不要返回一個引用去指向分配于堆上的對象;不要返回一個指向局部靜態對象的指針或引用。
閱讀全文 posted @ 2007-06-02 21:13 ★ROY★ 閱讀(1303) | 評論 (2) 編輯 [ECPP讀書筆記 條目20] 傳參時要多用“引用常量”,少用傳值posted @ 2007-06-01 18:12 ★ROY★ 閱讀(1434) | 評論 (3) 編輯 [ECPP讀書筆記 條目19] 要像設計類型一樣設計class
摘要: class設計就是類型的設計。在定義一個新的類型之前,要確保將本條目中所有的問題考慮周全。 閱讀全文
posted @ 2007-05-20 23:30 ★ROY★ 閱讀(926) | 評論 (2) 編輯 [ECPP讀書筆記 條目18] 要讓接口易于正確使用,而不易被誤用
摘要: 優秀的接口應該易于正確使用,而不易誤用。對所有的接口都應該力爭做到這一點。
保持與內置數據類型有一致的行為,是使接口易于正確使用的一種可行的方法 防止錯誤發生的方法有:創建新的數據類型,嚴格限定類型的操作,約束對象的值,不要將管理資源的任務留給客戶端程序員。 tr1::shared_ptr支持自定義的刪除功能。這可以防止“跨DLL問題”,可以應用與自動解開互斥鎖等情況。 閱讀全文 posted @ 2007-05-18 23:30 ★ROY★ 閱讀(867) | 評論 (0) 編輯 [ECPP讀書筆記 條目17] 用智能指針存儲由new創建的對象時要使用獨立的語句
摘要: 在單獨的語句中使用智能指針來保存由new創建的對象。如果不這樣做,你的程序會在拋出異常時發生資源泄漏。
閱讀全文 posted @ 2007-05-15 23:12 ★ROY★ 閱讀(1512) | 評論 (89) 編輯 [ECPP讀書筆記 條目16] 互相關聯的new和delete要使用同樣的形式
摘要: 如果你在一個new語句中使用了[],那么你必須要在相關的delete語句中使用[]。如果你在new語句中沒有使用[],那么在相關的delete語句中一定不要出現[]。
閱讀全文 posted @ 2007-05-14 22:15 ★ROY★ 閱讀(1107) | 評論 (0) 編輯 [ECPP讀書筆記 條目15] 要為資源管理類提供對原始資源的訪問權
摘要: API通常需要訪問原始資源,因此每個RAII類都應該提供一個途徑來獲取它所管理的資源。
訪問可以通過顯式轉換或隱式轉換來實現。一般情況下,顯式轉換更安全,但是隱式轉換對于客戶端程序員來說使用更方便。 閱讀全文 posted @ 2007-05-13 20:54 ★ROY★ 閱讀(819) | 評論 (0) 編輯 [ECPP讀書筆記 條目14] 要注意資源管理類中的復制行為posted @ 2007-05-11 18:40 ★ROY★ 閱讀(948) | 評論 (1) 編輯 [ECPP讀書筆記 條目13] 使用對象來管理資源
摘要: 為了避免資源泄漏,可以使用RAII對象,使用構造函數獲取資源,析構函數釋放資源。
auto_ptr或TR1::shared_ptr是兩個常用并且實用的RAII類。通常情況下TR1::shared_ptr是更好的選擇,因為它的復制行為更加直觀。復制一個auto_ptr將會使其重設為null。 閱讀全文 posted @ 2007-05-07 18:52 ★ROY★ 閱讀(1002) | 評論 (0) 編輯 [ECPP讀書筆記 條目12] 要復制整個對象,不要遺漏任一部分
摘要: 要確保拷貝函數拷貝對象的所有的數據成員,及其基類的所有部分,不要有遺漏。
不要嘗試去實現一個拷貝函數來供其它的拷貝函數調用。取而代之的是,把公共部分放入一個“第三方函數”中共所有拷貝函數調用。 閱讀全文 posted @ 2007-05-03 21:15 ★ROY★ 閱讀(883) | 評論 (1) 編輯 [ECPP讀書筆記 條目11] 在operator=中要考慮到自賦值問題
摘要: 勞動者萬歲!
在一個對象為自己賦值時,要確保operator=可以正常地運行。可以使用的技術有:比較源對象和目標對象的地址、謹慎安排語句、以及“復制并交換”。 在兩個或兩個以上的對象完全一樣時,要確保對于這些重復對象的操作可以正常運行。 閱讀全文 posted @ 2007-04-30 18:38 ★ROY★ 閱讀(1212) | 評論 (1) 編輯 [ECPP讀書筆記 條目10] 讓賦值運算符返回一個指向*this的引用
摘要: 讓賦值運算符返回一個指向*this的引用。
閱讀全文 posted @ 2007-04-28 20:35 ★ROY★ 閱讀(1063) | 評論 (4) 編輯 [ECPP讀書筆記 條目9] 永遠不要在構造或析構的過程中調用虛函數
摘要: 在程序進行構造或析構期間,你絕不能調用虛函數,這是因為這樣的調用并不會按你所期望的執行,即使能夠順利執行,你也不會覺得十分舒服。
閱讀全文 posted @ 2007-04-27 22:37 ★ROY★ 閱讀(1514) | 評論 (4) 編輯 [ECPP讀書筆記 條目8] 防止因異常中止析構函數
摘要: 永遠不要讓析構函數引發異常。如果析構函數所調用的函數會拋出異常的話,那么在析構函數中要捕捉到所有異常,然后忽略它們或者終止程序。
在一次操作中,如果一個類的使用者有能力對拋出異常作出反應,那么這個類應該提供一個常規的函數(而不是析構函數)來進行這一操作。 閱讀全文 posted @ 2007-04-22 14:00 ★ROY★ 閱讀(1437) | 評論 (3) 編輯 [ECPP讀書筆記 條目7] 要將多態基類的析構函數聲明為虛函數posted @ 2007-04-20 21:59 ★ROY★ 閱讀(1367) | 評論 (2) 編輯 [ECPP讀書筆記 條目6] 要顯式禁止編譯器為你生成不必要的函數
摘要: 為了禁用編譯器自動提供的功能,你必須將相關的成員函數聲明為private的,同時不要實現它。方法之一是:使用一個類似于Uncopyable的基類。
閱讀全文 posted @ 2007-04-18 23:21 ★ROY★ 閱讀(1049) | 評論 (1) 編輯 [ECPP讀書筆記 條目5] 要清楚C++在后臺為你書寫和調用了什么函數
摘要: 編譯器可能會隱式為一個類生成默認構造函數、復制構造函數、拷貝賦值運算符和析構函數。
閱讀全文 posted @ 2007-04-17 19:34 ★ROY★ 閱讀(1082) | 評論 (1) 編輯 [ECPP讀書筆記 條目4] 確保對象在使用前得到初始化
摘要: 為了避免在對象初始化之前使用它,你僅僅需要做三件事。第一,手動初始化基本類型的非成員對象。第二,使用成員初始化表來初始化對象的每一部分。最后,初始化次序的不確定性會使定義于不同置換單元中的非局部靜態對象之間產生沖突,要避免這樣的設計。
閱讀全文 posted @ 2007-04-15 20:23 ★ROY★ 閱讀(1627) | 評論 (4) 編輯 [ECPP讀書筆記 條目3] 盡可能使用const
摘要: const是一個令人贊嘆的東西。對于指針和迭代器,以及對于指針、迭代器和引用所涉及的對象,對于函數的參數和返回值,對于局部變量,以及對于成員函數來說,const都是一個強大的伙伴。盡可能去利用它。你一定不會后悔。
閱讀全文 posted @ 2007-04-11 19:55 ★ROY★ 閱讀(1433) | 評論 (3) 編輯 [ECPP讀書筆記 條目2] 多用const、enum、inline,少用#define
摘要: 對于簡單的常量,應多用const對象或枚舉類型數據,少用#define。
對于類似程序的宏,應多用內聯函數,少用#define。 閱讀全文 posted @ 2007-04-04 21:58 ★ROY★ 閱讀(2224) | 評論 (0) 編輯 [ECPP讀書筆記 條目1] 把C++看作多種語言的聯合體
摘要: 無論你有怎樣的編程背景,都需要用一些時間和精力來適應C++。 C++是一門強大的編程語言,它擁有數不盡的實用功能,但是在你能夠熟練地駕御C++的力量,并且恰當而高效地利用這些功能之前,首先你要適應C++做事情的方式。這本書自始至終都是在介紹如何順利地完成這一適應過程,但是相比較大多數議題而言,還有一些更為基礎的內容,本章向大家介紹的就是這些更為基礎的東西。 閱讀全文
posted @ 2007-04-02 21:12 ★ROY★ 閱讀(2309) | 評論 (6) 編輯
|
|