Effective C 筆記 4 設計與宣告

2021-08-19 13:47:01 字數 1307 閱讀 3135

條款18:讓介面容易被正確使用,不易被誤用

請記住:

好的介面很容易被正確使用,不容易被誤用。你應該在你的所有介面中努力達到這些性質。

「促進正確使用」的方法包括介面的一致性,以及與內建型別的行為相容。

「阻止誤用」的辦法包括建立新型別、限制型別上的操作,束縛物件值,以及消除客戶的資源管理責任。

trl::shared_ptr支援定製型刪除器(custom deleter)。這可防範dll問題,可被用來自動解除互斥鎖(mutexes)等等。

條款19:設計class猶如設計type

如何設計高效的classes呢?

請記住:

class的設計就是type的設計。

條款20:寧以pass-by-reference-to-const替換pass-by-value

預設情況下c++以by value方式(乙個繼承自c的方式)傳遞物件至函式。

請記住:

條款21:必須返回物件時,別妄想返回其reference

函式建立新物件的途徑有二:在stack空間或在heap空間建立之。

請記住:

條款22:將成員變數宣告為private

請記住:

條款23:寧以non-member、non-friend替換member函式

請記住:

條款24:若所有引數皆需型別轉換,請為此採用non-member函式

請記住:

條款25:考慮寫出乙個不拋異常的swap函式

swap是個有趣的函式。原本它只是個stl的一部分,而後稱為異常安全性程式設計的脊柱,以及用來處理自我賦值可能性的乙個常見機制。

首先,如果swap的預設實現碼對你的class或class template提供可接受的效率,你不需要額外做任何事。任何嘗試置換(swap)那種物件的人都會取得預設版本,而那將有良好的運作。

其次,如果swap預設實現版的效率不足(那幾乎總是意味你的class或template使用了某種pimpl手法),試著做以下事情:

提供乙個public swap成員函式,讓它高效地置換你的型別的兩個物件值。

在你的class或template所在的命名空間內提供乙個non-member swap,並令它呼叫上述swap成員函式。

如果你正在編寫乙個class,為你的class特化std::swap。並令它呼叫你的swap成員函式。

請記住:

《effective c 》讀書筆記4

條款41 了解隱式介面和編譯期多型 n classes和templates都支援介面和多型 n 對classes而言介面是顯式的,以函式簽名為中心,多型則是通過虛函式發生於執行期。n 對templates引數而言,介面是隱式的,奠基於有效表示式,多型則是通過template具現化和函式過載解析發生於...

Effective C 筆記 物件導向設計

摘自 effetive c 中文版第三版 從編譯器來看,符號表與編譯的各個階段都有互動,一般來講,符號表有記憶體位址和函式 變數的對應關係,編譯時節點的各種屬性 型別,作用域,分配空間大小,函式 的引數型別等 因為例如 define kkk 1.653 段在編譯器開始處理原始碼之前可能會被預處理器取...

Effective C 筆記 設計與宣告 三

item 23 用非成員非友元函式取代成員函式 想象乙個象徵 web urls 的歷史,以及從系統移除所有 cookies 的功能 class webbrowser 很多使用者希望能一起執行全部這些動作,所以 webbrowser 可能也會提供乙個函式去這樣做 class webbrowser 當然...