zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

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

    当不用初始化列表时:

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

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

  • 相关阅读:
    搜索复习-中级水题
    搜索复习-基础水题(一共12道)
    TCPThree_C杯 Day1
    bzoj1579 道路升级
    bzoj3732 Network(NOIP2013 货车运输)
    bzoj1624 寻宝之路
    bzoj1430 小猴打架
    bzoj2763 飞行路线
    2017-10-28-afternoon-清北模拟赛
    2017-10-28-morning-清北模拟赛
  • 原文地址:https://www.cnblogs.com/XiaoXiaoShuai-/p/11377718.html
Copyright © 2011-2022 走看看