c++ 初始化列表和构造函数初始化区别

时间:2019-08-19
本文章向大家介绍c++ 初始化列表和构造函数初始化区别,主要包括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