美文网首页
Member Initialization List优势

Member Initialization List优势

作者: FakeCSer爱去网吧 | 来源:发表于2021-04-21 11:25 被阅读0次

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

  • 运行结果


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

相关文章

网友评论

      本文标题:Member Initialization List优势

      本文链接:https://www.haomeiwen.com/subject/ptballtx.html