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;
}

  

当用初始化列表时,输出如下:

当不用初始化列表时:

总结:当不用初始化列表进行初始化时,先调用默认构造函数构造了类成员,然后再调用赋值运算符对之前默认构造的类成员进行赋值,这实际上进行了两步操作。

当用初始化列表了,程序直接调用了拷贝构造函数,只需要一步操作。

原文地址:https://www.cnblogs.com/XiaoXiaoShuai-/p/11377718.html