other->l類型別 :找到合適的建構函式生成該類的物件(如果找不到例項化物件失敗)
隱式呼叫建構函式 顯示呼叫函式(無名物件(零時物件))
賦值運算子過載函式
分為3步
第一步 判斷是不是自身賦值(防止失敗出錯)
第二步 釋放this指標所指的(外部)空間的大小
第三步重新分配空間 拷貝資料;
物件的生存週期
全域性物件和靜態物件的生存週期最長
臨時變數的生存週期只在該條語句結束後結束
但是有一中情況是特例
goods &p=good(); 無名物件變為有名物件
所以生存週期是棧上的週期
用乙個零時變數拷貝構造物件時編譯器會自己處理成乙個建構函式
goods p=good();這個東西會處理為 good p(); 如果實參是物件 形參是物件 是拷貝構造
如果是實參是臨時物件形參是物件 是構造
如果實參是零時物件形參是引用 是拷貝構造
內建型別產生的臨時量都是const
自定義產生的是變數
隱式呼叫產生的是cosnst物件
堆上開闢的物件 當呼叫玩那delete後析構 例子
test t1(10, 10);
int main()
test t5(100, 100);
順序:構造全域性物件t1
構造全域性物件t5
構造全域性物件t2
拷貝構造物件t3
構造物件t4
構造零時變數
賦值析構零時變數
隱式呼叫構造
賦值析構零時變數
構造堆上的變數
構造兩個堆上的變數
構造乙個零時變數
析構零時變數
構造零時變數 給個p4 名字
析構p1;
析構p2;
析構p4
析構t3
析構t2
析構t4
析構t5
析構t1
拷貝構造與過載賦值運算子
編譯器預設的拷貝建構函式,發生的是memberwise initialization 成員逐一初始化 類的成員變數被逐一複製。而預設賦值運算子,也是逐一複製成員變數。一旦成員變數中,有程式設計師在heap開闢的空間 指標,new 使用預設拷貝建構函式就會引起淺拷貝和深拷貝的問題。include us...
拷貝建構函式與賦值運算子過載
拷貝建構函式 只有單個形參,該形參是對本類型別物件的引用 一般常用const修飾 在用已存在的類型別物件建立新物件時由編譯器自動呼叫。1.拷貝建構函式是建構函式的乙個過載形式 class date date const date d private int year int month int da...
拷貝建構函式與過載賦值運算子
注意 該作者部落格已遷移至 如果乙個建構函式的第乙個引數是自身類型別的引用,且任何額外的引數都有預設值,則此建構函式是拷貝建構函式。c premier裡的定義 拷貝建構函式應用的場景 預設拷貝建構函式 class ctest ctest void test ctest obj intmain 這個程...