有无显式初始化列表对构造函数跟析构函数的影响

有无显式初始化列表对构造函数和析构函数的影响

先看看有显式初始化列表的例子:

#include <iostream>

using namespace std;

class A
{
public:
    A(){cout << "A" << endl;}
    ~A(){cout << "~A" << endl;}
};

class B:public A
{
public:
    B(A& a):_a(a)
    {
        cout << "B" << endl;
    }
    ~B()
    {
        cout << "~B" << endl;
    }
private:
    A _a;
};

int main()
{
    A a;
    B b(a);
    return 0;
}
看看结果是什么?

有无显式初始化列表对构造函数跟析构函数的影响


在看看未显式初始化的例子:

#include <iostream>

using namespace std;

class A
{
public:
    A(){cout << "A" << endl;}
    ~A(){cout << "~A" << endl;}
};

class B:public A
{
public:
    B(A& a)
    {
        _a = a;
        cout << "B" << endl;
    }
    ~B()
    {
        cout << "~B" << endl;
    }
private:
    A _a;
};

int main()
{
    A a;
    B b(a);
    return 0;
}
看看结果是什么:

有无显式初始化列表对构造函数跟析构函数的影响
看到不同了吗?嘿嘿,讨论一下吧