調用複製構造函數的時機: 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 } |
拷貝構造函數與析構順序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.