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;
}
当用初始化列表时,输出如下:

当不用初始化列表时:

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

浙公网安备 33010602011771号