#include<iostream>
#include<vector>
using namespace std;
class Exmpl
{
public:
Exmpl()
{
cout << "默認構造函數運行:Exmpl()" << endl;
}
Exmpl(const Exmpl&)
{
cout << "複製構造函數運行:Exmpl(const Exmpl&)" << endl;
}
Exmpl & operator = (const Exmpl &rhs)
{
cout << "賦值操作符函數在運行:operator = (const Exmple&)" << endl;
return *this;
}
~Exmpl()
{
cout << "析構函數在運行:~Exmpl" << endl;
}
};
void func1(Exmpl obj){}
void func2(Exmpl& obj){}
Exmpl func3()
{
Exmpl obj;
return obj;
}
int main()
{
cout << "輸出爲:"<< endl;
cout << endl;
Exmpl eobj;
cout << endl;
eobj = func3();
cout << endl;
Exmpl *p = new Exmpl;
cout << endl;
vector<Exmpl> evec(3);//編譯器首先使用Exmpl默認構造函數創建一個臨時值來初始化evec,然後使用複製構造函數將臨時值複製到evec的每個元素。
cout << endl;
delete p;//撤銷動態創建的Exmpl對象。即在Exmpl *p = new Exmpl創建的對象
cout << endl;
return 0;//程序結束後,如果在構造函數中分配的資源沒有被顯式的回收,則會自動調用析構函數。
}
輸出結果爲:
從輸出結果中可以看出:每調用一次複製構造函數或賦值操作符函數,都會調用析構函數,而調用默認構造函數時所分配的資源,在程序結束時由析構函數回收。