默認構造函數,複製構造函數,賦值操作符函數,析構函數的調用。

#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;//程序結束後,如果在構造函數中分配的資源沒有被顯式的回收,則會自動調用析構函數。

}

輸出結果爲:


從輸出結果中可以看出:每調用一次複製構造函數或賦值操作符函數,都會調用析構函數,而調用默認構造函數時所分配的資源,在程序結束時由析構函數回收。

發佈了29 篇原創文章 · 獲贊 10 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章