Effective C 之2 構造析構賦值運算

2021-10-02 11:13:04 字數 943 閱讀 5652

編譯器可以暗自為class建立default建構函式、copy建構函式、copy assignment操作符,以及析構函式。

為了駁回編譯器暗自提供的機能,可將相應的成員函式宣告為private並且不予實現。使用像uncopyable這樣的base class 也是一種做法。不過c++11開始,可以用delete實現。

class homeforsale

;

這一點很重要。polymorphic base classes應該宣告乙個virtual析構函式。如果class帶有任何virtual函式,它就應該擁有乙個virtual析構函式。classes的設計目的如果不是作為base classes使用,或不適為了具備多型性,就不該宣告virtual析構函式。

析構函式絕對不要吐出異常。如果乙個被析構函式呼叫的函式可能丟擲異常,析構函式穎捕捉任何異常,然後吐下它們(不傳播)或結束程式。如果客戶需要對某個操作函式執行期間丟擲的異常做出反應,那麼class應該提供乙個普通函式(而非在析構函式中)執行該操作。

在構造和析構期間不要呼叫virtual函式,因為這類呼叫從不下降至derived class(比起當前執行建構函式和析構函式的那層)。

這只是個協議,並無強制性。如果不遵循它,**一樣可以通過編譯。然而這份協議被所有內建型別和標準程式庫的型別共同遵循。因此除非你有乙個標新立異的理由,不然還是隨眾吧。

自我賦值發生在物件被賦值給自己時。這裡以精心周到的語句順序的技術為例,其確保當物件自我賦值是operator=有良好行為。

widget& widget::operator=(const widget& rhs)

copying函式應該確保複製「物件內的所有成員變數」及「所有base class 成分」。不要嘗試以某個copying函式實現另乙個copying函式。應該將共同機能放進第三個函式中,並由兩個copying函式共同呼叫。

Effective C 之構造,拷貝函式

3.條款之不使用預設生成的函式,應該明確拒絕 我們知道c 類會幫我們自動生成建構函式,析構函式函式,拷貝建構函式,和賦值函式 include using namespace std class homeclass int main int argc,char argv 以下 是可以通過,也符合c 準...

Swift學習之構造與析構

swift限制類的建構函式之間 呼叫的規則 構造過程安全檢查 建構函式繼承 析構函式簡介 建構函式 init 示例 class employee struct rectangle rectangle width 10.0,height 10.0 上面結構體重使用了預設建構函式,結構體中按照從上到下的...

C 之構造與析構(下)

小插曲 類中的const成員 物件的銷毀 c 中的析構函式 array類的進化 建構函式與析構函式的呼叫秩序 類的內部可以直接呼叫類的建構函式嗎?c 中的類可以使用其它類定義成員變數 問題 如何給物件成員進行初始化?物件組合示例 分析 編譯錯誤,那麼如何給物件成員進行初始化?語法規則 2.初始化列表...