复合对象的构造和析构顺序
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这个对象。但是带有模板的并不会构造,是不太一样的,构造时机是赋值时调用拷贝构造函数。
相关文章推荐
- 验证:oracle delete 数据库空间是可以重新被使用的
- java基础--内部类
- http请求的完整过程
- 表单提交1
- 爱折腾的女程序员
- Hive-0.5中SerDe概述
- 面试题13:在O(1)的时间删除链表结点
- 深圳市帮宝网络笔试题(回忆)
- 验证(Javascript和正则表达式)
- python图像处理之反色实现方法
- Android开发中的Activity和ActionBarActivity有什么区别
- POJ 题目分类
- 面试题12:打印1到最大的n位数
- CF 217A A. Ice Skating(贪心)
- Hibernate-org.hibernate.QueryException: could not resolve property: code of:
- 验证(C#和正则表达式)
- OpenGrok的安装
- 如何度过每天的最初十分钟
- 蓝牙代码基本结构分析
- MVC架构 用户访问流程图