Effective cpp 讀書筆記2

2021-07-11 17:26:52 字數 1099 閱讀 9235

c++默默編寫的函式(程式設計師沒有宣告的前提下):default建構函式、copy建構函式、copy assignment操作符、default析構函式(非virtual)

編譯器產出的函式都是public的

關於建構函式,如果使用者定義了至少一種,就不會有預設建構函式

結論:

自行宣告和定義

將對應的函式宣告為private而且故意不實現它們

私有的繼承uncopyable類

任何class只要帶有virtual函式都幾乎確定應該也有乙個virtual析構函式

當class不企圖被當做base class, 令其析構函式為virtual是不好的

換而言之,對於析構函式不是virtual的class,不適合作為base class,典型代表是string類以及stl裡面的類

有時候讓class包含純虛的析構函式是有意義的,注意需要為它提供定義

析構函式絕對不要吐出異常。如果乙個被析構函式呼叫的函式可能丟擲異常,析構函式應該捕捉任何異常,然後吞下它們(不傳播)或結束程式

如果客戶需要對某個操作函式執行期間丟擲的異常作出反應,那麼class應該提供乙個普通函式(而非在析構函式中)執行該操作

如果在構造函式呼叫virtual函式

如果在析構函式呼叫virtual函式(道理同建構函式)

注意:最簡單的例子:連鎖賦值的時候,賦值操作符必須返回乙個reference指向操作符的右側實參

不僅是賦值,和賦值相關的操作符,如+=、-=等都應該返回引用

當某段**操作pointers或references,而他們被用來「指向多個相同型別的物件」,就需要考慮這些物件是否為同乙個

賦值過程中,有可能因為同乙個物件之間的賦值操作導致「在停止使用資源之前意外釋放」的錯誤

解決方法:

結論:確定任何函式如果操作乙個以上的物件,而其中多個物件是同乙個物件時,其行為仍然正確

copying函式:copy建構函式 + copy assignment

copying函式應該確保賦值「物件內的所有成員變數」及「所有base class 成分」

不要嘗試以某個copying函式實現另乙個copying函式,應該將共同機能放進第三個函式,並由兩個copying函式共同呼叫

Effective cpp 讀書筆記1

本週內,每天更新。c 的特性主要 四個大方面 四個次語言 結論 壞處用const取代 用enum取代 用inline取代 結論 注意 const成員函式 bitwise constness 編譯器就是這種 和logical constness 在const和non const成員函式中避免重複 結論...

Effective cpp 讀書筆記5

切記將成員變數宣告為private。這可賦予客戶訪問資料的一致性 可細微劃分訪問控制 允諾約束條件或的保證,並提供class作者以充分的實現彈性 protected並不比public更具封裝性 這樣做可以增加封裝性 包裹彈性和技能擴充性 目的是為了保證函式一致性。典型例子是過載類的運算子operat...

Effective cpp 讀書筆記9

當我們編寫乙個class template,而它所提供的 與此template相關的 函式支援 所有引數之隱式型別轉換時 請將那些函式定義為 class template內部的friend函式 個人理解 template實參推導過程中,從來不將隱式型別轉換函式納入考慮。這樣的轉換咋函式呼叫過程中確實...