未使用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);
}
-
运行结果
默认构造+拷贝赋值
使用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);
}
-
运行结果
直接拷贝构造,少了一次默认构造
优势:简单的来说就是先初始化后赋值和初始化直接赋值的区别,直接赋值更快。