未使用Member Initialization List
#include <iostream>
using namespace std;
class BaseTest1 {
public:
BaseTest1();
BaseTest1(const BaseTest1& t1);
BaseTest1& operator=(const BaseTest1& t1);
private:
int a;
};
BaseTest1::BaseTest1()
{
cout << "BaseTest1 Constructor" << endl;
this->a = 0;
}
BaseTest1::BaseTest1(const BaseTest1 &t1)
{
cout << "BaseTest1 Copy Constructor" << endl;
this->a = t1.a;
}
BaseTest1& BaseTest1::operator=(const BaseTest1 &t1)
{
cout << "BaseTest1 assignment" << endl;
this->a = t1.a;
return *this;
}
class Test {
public:
Test(BaseTest1& t1) //未使用Member Initialization List
{
this->test1 = t1;
}
public:
BaseTest1 test1;
};
int main(int argc, char* args[])
{
BaseTest1 test1;
Test test(test1);
}
-
運行結(jié)果
默認(rèn)構(gòu)造+拷貝賦值
使用Member Initialization List
#include <iostream>
using namespace std;
class BaseTest1 {
public:
BaseTest1();
BaseTest1(const BaseTest1& t1);
BaseTest1& operator=(const BaseTest1& t1);
private:
int a;
};
BaseTest1::BaseTest1()
{
cout << "BaseTest1 Constructor" << endl;
this->a = 0;
}
BaseTest1::BaseTest1(const BaseTest1 &t1)
{
cout << "BaseTest1 Copy Constructor" << endl;
this->a = t1.a;
}
BaseTest1& BaseTest1::operator=(const BaseTest1 &t1)
{
cout << "BaseTest1 assignment" << endl;
this->a = t1.a;
return *this;
}
class Test {
public:
Test(BaseTest1& t1) :test1(t1)//使用了Member Initialization List
{
}
public:
BaseTest1 test1;
};
int main(int argc, char* args[])
{
BaseTest1 test1;
Test test(test1);
}
-
運行結(jié)果
直接拷貝構(gòu)造,少了一次默認(rèn)構(gòu)造
優(yōu)勢:簡單的來說就是先初始化后賦值和初始化直接賦值的區(qū)別敌土,直接賦值更快镜硕。