三法則(英語:rule of three,the law of the big three,the big three;三法則,三大定律)在 c++ 程式設計裡,它是乙個以設計的基本原則而制定的定律,三法則的要求在於,假如類有明顯地定義下列其中乙個成員函式,那麼程式設計師必須連其他二個成員函式也一同編寫至類內,亦即下列三個成員函式缺一不可。:析構函式(destructor)
複製建構函式(copy constructor)
複製賦值運算子(copy assignment operator)
上述三個函式是特別的成員函式,假如程式設計師沒有自行定義或是編寫宣告它們,那麼編譯器會自動地建立它們,並且會編譯至應用程式內。相反地,假如程式設計師有定義上述三者其中乙個函式,那麼由編譯器自動產生出來的上述三個函式是不會搭配到這個類內。三法則(rule of three)這個專有名詞是由 marshall cline 於 1991 年創立的。
這個法則的修正版本是,假如析構函式有用到 raii(資源的取得就是初始化,resource acquisition is initialization),可以使得析構函式的定義更加明確(也就是所謂的二大定律,the law of the big two[3])。
因為隱性產生(英語:implicitly-generated;由編譯器自動產生)的建構函式與賦值運算子可以很容易地複製類內所有的資料成員[4],當資料成員是指標型態時,指標位址會隨著類而跟著被複製,要注意的是,直接地複製指標位址是一項非常危險的動作,所以只要類有封裝指標型態的資料結構,或是類有封裝外部引用的資料成員(例如:指標型態的資料成員),程式設計師應該為此定義顯性的(英語:explicit;由程式設計師來編寫清楚明確的)複製建構函式,以及複製賦值運算子。
ps.根據我的理解,用到自己寫析構的話一般得釋放自己分配的空間,而涉及到自己分配空間的話,其成員變數就有指標等型別,這樣的話就得自己寫賦值操作符和複製建構函式了
C 類的「三法則」
三法則 定義其中乙個成員函式,那麼程式設計師必須連其他二個成員函式也一同編寫至類內,亦即下列三個成員函式缺一不可。析構函式 destructor 複製建構函式 copy constructor 複製賦值運算子 copy assignment operator 理解點 用到自己寫析構的話一般得釋放自己...
C 大三法則相關問題
最近,曾老師再講c 講到c 大三法則,不同特來搜尋,總結如下 c 三法則 如果需要析構函式,則一定需要拷貝建構函式和賦值操作符。如何理解這句話,首先,從 如果需要析構函式 這裡我們知道,類中必然出現了指標型別的成員 否則不需要我們寫析構函式,預設的析構函式就可以用了 所以,我們需要自己寫析構函式來釋...
網路服務規模三法則
前幾天看了hust的 的ppt,其中講到了網路服務的規模問題。網路服務的規模分為三種 sarnoff law 效益規模是o n,網路是廣播媒介,任1傳送者 裝置 和多個 n 1 接收者 裝置 這種法則的拓普結構是星形的,大概相當於我們常說的c s模式吧。metcalfe law 效益規模是o n2 ...