复合对象的构造和析构顺序

来源:互联网 发布:济南公交线路查询软件 编辑:程序博客网 时间:2024/05/10 14:30
class A{public:A(){ cout << "A()" <<endl;};~A(){ cout << "~A()" <<endl;};A(A& other){cout << "A copy function" <<endl; }A& operator = (A& other){cout << "A operator =" <<endl; return *this;}};class T{public:    T(){        cout << "T()" <<endl;}~T(){        cout << "~T()" <<endl;}    void setA(A a){ //4        _a = a;  //5//6}public:A _a;  //2 构造T的对象t时,先构造成员变量_a};void main(){    A a;  //1 构造aT t;  //3 构造tt.setA(a);    //7 T生命周期结束//8 T内部_a生命周期结束//9 a生命周期结束}/*A()             // 1 构造aA()             // 2 构造T的对象t时,先构造成员变量_aT()             // 3 构造tA copy function // 4 构造setA中的参数A a时,调用copy functionA operator =    // 5 在setA中赋值时调用operator =运算符~A()            // 6 析构setA中参数传过来的对象a~T()            // 7 析构对象t~A()            // 8 析构T对象t中的_a~A()            // 9 析构a*/
总结:为了构造T对象,由2得出,先构造的是数据成员_a这个对象。但是带有模板的并不会构造,是不太一样的,构造时机是赋值时调用拷贝构造函数。
0 0