1 複製建構函式
只有單個形參,而且該形參是對本類型別物件的引用(常用const修飾),這樣的建構函式稱為複製建構函式。
直接初始化呼叫的是實參匹配的建構函式,複製初始化呼叫的複製建構函式。複製初始化首先使用指定建構函式建立乙個臨時物件,然後用複製建構函式將那個臨時物件複製到正在建立的物件。
合成的複製建構函式
對需要類而言,合成複製建構函式只完成必要的工作。只包含類型別成員或內建型別(但不是指標型別)成員的類,無須顯示得定義複製建構函式,也可以複製。然後有些類必須對複製物件時發生的事情加以控制。這樣的類經常有乙個資料成員是指標或者有成員表示在建構函式中分配的其他資源,而另乙個類在建立新物件時必須做一些特定工作。這兩種情況下,都必須定義複製建構函式。通常,定義複製建構函式最困難的部分在於認識到需要複製建構函式。
禁止複製
為了防止複製,類必須顯示宣告其複製建構函式為private。如果想友元和成員中複製也禁止,就可以申明乙個private的複製建構函式但不對其定義。
大多數類應該定義複製建構函式和預設建構函式,一般來說最好顯式或隱式定義預設建構函式和複製建構函式。只有不存在其他建構函式時才合成預設建構函式。如果定義了複製建構函式,也必須定義預設建構函式。
2 賦值操作符
studentinfo& studentinfo::operator=(const studentinfo & studentinfo)
一般而言,如果類需要複製建構函式,也會需要賦值操作符,應該需要將這兩個操作看作乙個單元。
3 析構函式
析構函式可以完成所需資源的**,作為類建構函式的補充。
變數在超出作用域時應該自動撤銷,因此在遇到右花括號時,將執行item的析構函式。動態分配的物件只有在指向物件的指標被刪除的才撤銷。
如果類需要析構函式,則它也需要賦值操作符和複製建構函式,這是乙個有用的經驗法則,這個規則稱為三發則。
與複製建構函式或賦值操作符不同,編譯器總是會為我們合成乙個析構函式,合成析構函式按物件建立時的逆序撤銷每個非static成員,對於類型別的每個成員,合成析構函式呼叫該成員的析構函式來撤銷物件。
分配了資源的類一般需要定義析構函式以釋放哪些資源。
~studentinfo(){};
撤銷物件時,先執行我們定義的析構函式,然後執行合成析構函式。
C 複製控制
當定義乙個新型別時,通過使用複製建構函式,賦值操作符,析構函式來顯示或隱式地完成物件的複製,賦值,撤銷 1.複製建構函式 只有單個形參,而且該形參是對本類型別物件的引用 通常是const修飾 的建構函式,稱為 複製函式可用於 color red 1 根據另乙個同型別的物件顯示或隱式初始化乙個物件.2...
11 C 類複製控制
類複製控制 前言,定義,基類與派生類,設計指導 1.前言 複製控制通常指類的複製建構函式,賦值操作運算子,析構函式 1.1複製建構函式 引入複製建構函式是為了讓類的物件直接生成另乙個物件,同時把此物件的資料複製到另乙個物件中 如果類中沒有實現複製建構函式,編譯器自動新增乙個,如果我們不需要,則把它明...
C 中類的複製控制
每種型別,無論是內建型別還是類型別,都對該型別物件的一組操作進行了定義。每種型別還定義了建立該型別的物件時會發生什麼 建構函式 該類型別物件的初始化。當定義乙個新型別的時候,需要顯式或者隱式地指定複製,賦值和撤銷該型別的物件時會發生什麼,這是通過定義特殊成員 複製建構函式,賦值操作符和析構函式來達到...