Member Initialization List优势

FakeCSer爱去网吧IP属地: 四川
字数 78

未使用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);
}

  • 运行结果


直接拷贝构造,少了一次默认构造
优势:简单的来说就是先初始化后赋值和初始化直接赋值的区别,直接赋值更快。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
0人点赞
FakeCSer爱去网吧备忘式的记录<br>如有不当的地方,欢迎指正
总资产5共写了2.8W字获得73个赞共4个粉丝

推荐阅读更多精彩内容