c++ 初始化列表和構造函數初始化區別


 

先上代碼

#include <iostream>

class MyContruct
{
public:
	MyContruct()
	{
		std::cout << "MyContruct() is called" << std::endl;
	}
	MyContruct(const MyContruct&)
	{
		std::cout << "MyContruct(const MyContruct&) is called" << std::endl;
	}
	MyContruct& operator=(const MyContruct&)
	{
		std::cout << "MyContruct& operator=(const MyContruct&) is called" << std::endl;
		return *this;
	}
	~MyContruct()
	{
		std::cout << "~MyContruct() is called" << std::endl;
	}
};

class Mytest
{
public:
	Mytest(MyContruct mc) :m_pMc(mc)
	{
		std::cout << "Mytest(MyContruct mc) is called" << std::endl;
		/*m_pMc = mc;*/
	}
	~Mytest()
	{
		std::cout << "~Mytest() is called" << std::endl;
	}
private:
	MyContruct m_pMc;
};


int main()
{
	MyContruct mc;
	std::cout << std::endl;
	Mytest mt(mc);
	std::cout << std::endl;
	return 0;
}

  

當用初始化列表時,輸出如下:

 

當不用初始化列表時:

 

總結:當不用初始化列表進行初始化時,先調用默認構造函數構造了類成員,然后再調用賦值運算符對之前默認構造的類成員進行賦值,這實際上進行了兩步操作。

當用初始化列表了,程序直接調用了拷貝構造函數,只需要一步操作。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM