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