經過下面primer中的一道習題,能夠更深入的瞭解,析構函數,複製構造函數,賦值操做符重載,默認構造函數的使用。ios
可是個人結果與primer習題解答裏面的並不相同,多是編譯器不一樣的緣由致使。函數
// test1107.cpp : 定義控制檯應用程序的入口點。 // #include "stdafx.h" #include <iostream> #include <vector> using namespace std; struct Exam{ Exam(){ cout<<"Exam()"<<endl;} //默認構造函數 Exam(const Exam&){ cout<<"Exam(const Exam&)"<<endl;} //複製構造函數 Exam& operator= (const Exam&){ cout<<"Exam& operator"<<endl;return *this;} //賦值操做符 ~Exam(){ cout<<"~Exam()"<<endl;}//析構函數 }; void func1(Exam a){}//形參爲 exam的對象 void func2(Exam& b){}//形參爲 exam的引用 Exam func3(){Exam obj;return obj;} //返回exam的對象 int main(){ cout<<"--------------------1----------------"<<endl; Exam a; //調用默認的構造函數建立對象a cout<<"--------------------2----------------"<<endl; func1(a);// 調用複製構造函數,建立副本傳遞實參,撤銷副本 cout<<"--------------------3----------------"<<endl; func2(a); //形參爲引用,無需傳遞實參 cout<<"--------------------4----------------"<<endl; a = func3(); //調用默認構造函數建立局部對象, //用複製構造函數返回對象副本 //調用析構函數撤銷局部對象 //調用賦值函數賦值 //調用析構函數撤銷副本 cout<<"--------------------5----------------"<<endl; Exam *b = new Exam(); //調用默認構造函數建立對象 cout<<"--------------------6----------------"<<endl; vector<Exam> exec(3); //調用默認構造函數建立對象 //調用賦值構造函數將臨時對象複製到每一個元素 //調用析構函數撤銷 //重複三次 cout<<"--------------------7----------------"<<endl; delete b; //調用析構,撤銷p cout<<"--------------------8----------------"<<endl; system("pause"); }
執行結果以下:this