拷貝構造與賦值運算子過載(順序)

2021-08-01 02:03:04 字數 985 閱讀 9537

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 這個程...