您的位置:首页 > 其它

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

2015-05-30 11:53 148 查看
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 构造a
T t;  //3 构造t
t.setA(a);
//7 T生命周期结束
//8 T内部_a生命周期结束
//9 a生命周期结束
}

/*
A()             // 1 构造a
A()             // 2 构造T的对象t时,先构造成员变量_a
T()             // 3 构造t
A copy function // 4 构造setA中的参数A a时,调用copy function
A operator =    // 5 在setA中赋值时调用operator =运算符
~A()            // 6 析构setA中参数传过来的对象a
~T()            // 7 析构对象t
~A()            // 8 析构T对象t中的_a
~A()            // 9 析构a
*/
总结:为了构造T对象,由2得出,先构造的是数据成员_a这个对象。但是带有模板的并不会构造,是不太一样的,构造时机是赋值时调用拷贝构造函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: