拷貝構造函數與析構順序

調用複製構造函數的時機

1,用一個已有對象初始化另一個對象 

void main()

{

Test88 t1;

Test88 t3;

//第一種場景

//1賦值構造函數和=操作是兩個不同的概念

//2  賦值構造函數 copy構造函數 也是構造函數

//3 當沒有編寫拷貝構造函數時,編譯器會默認提供一個copy構造函數,執行淺拷貝

//在這個場景之下。t2被創建,並且自動的調用copy構造

Test88 t2 = t1; //對象t2的初始化,等於Test88 t2 ( t1);

t2 = t1; //是對象的=操作

system("pasue");

}

2函數的類類型實參初始化形參時,使用拷貝構造函數,將實參local的數據複製到形參p

Class Location{

};

Void F(Location p){cout<<p.getX()<<p.getY<<endl;}

Void main()

{

Location local;

F(local);

}

3函數返回類類型時,通過複製構造函數建立臨時對象  

Location g()

{

Location A(1, 2);

return A; //將局部對象拷貝到匿名對象中,調用拷貝構造函數

}

void main101()

{

Location B;

B = g(); //執行賦值重載運算(如果自己寫了運算符重載調用自定義的,如果沒有則調用默認),將匿名對象賦值給B,淺複製

 

}

//析構順序是A-》匿名對象-》B

析構原則:先存在的後析構

匿名對象

void main ()

{

Location B=g();//只調用兩次構造與析構,因爲c++編譯器做了優化,若果是B的初始化,則不用調用B的拷貝構造函數,直接將匿名對象給B

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章