在类的初始化过程中,成员初始化表是一种更高效的方式,从下面例子可以看出以下两种初始化方法的效率区别
第一种:
BigClass(const MemClass& a):_a(a){}
第二种:
BigClass(const MemClass& a)
{
_a = a;
}
对于第一种 成员类不调用默认构造函数,直接调用复制构造函数
对于第二种 成员类首先调用默认构造函数,然后调用=操作符重载 来完成复制
其区别类似于
MemClass a(MemClass(b));
和
MemClass a;
MemClass b;
a = b;
以下是完整代码
#include <iostream>
using namespace std;
class MemClass
{
private:
int num;
public:
MemClass()
{
cout<<"default Constructer of MemClass is called,Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
}
MemClass(int n)
{
cout<<"Constructer of MemClass is called ADDR:"<<this<<" size:"<<sizeof(*this)<<endl;
num = n;
}
MemClass(const MemClass &a)
{
cout<<"copy construct of MemClass is called Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
this->num = a.num;
}
MemClass& operator= (const MemClass& roe)
{
cout<<"operator= of MemClass is called Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
if (this == &roe) return *this;
this->num = roe.num;
return *this;
}
~MemClass()
{
cout<<"MemClass is destructed Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
}
};
class BigClass
{
private:
MemClass _a;
public:
BigClass()
{
cout<<"default Constructor of BigClass Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
}
#ifdef CASE1
BigClass(const MemClass& a):_a(a)
{
cout<<"Constructor of BigClass Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
}
#else
BigClass(const MemClass& a)
{
cout<<"Constructor of BigClass Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
_a = a;
}
#endif
~BigClass(){cout<< "BigClass is destructed Addr:"<<this<<" size:"<<sizeof(*this)<<endl;}
};
int main()
{
BigClass big2(MemClass(1));
return 0;
}