构造函数调用顺序示例

1,构造函数只能调用一次

    析构函数调用顺序和,构造函数调用顺序相反,谁先被构造,最后被析构

   函数中定义的局部类 会在函数执行完毕后,析构 

 1 void func(Test t) //Test t = test1::t1; //会调用局部变量t的拷贝构造函数
 2 {
 3     cout << "func begin..." << endl;
 4     t.printT();
 5     cout << "func end..." << endl;
 6 
 7 }
 8 25 //场景四
26 Test func2()
27 {
28     cout << "func2 begin..." << endl;
29     Test temp(10, 20); //调用temp的带参数构造函数  
30     cout << "func2 end.." << endl;
31     return temp; // 有一个临时的匿名对象 = temp ,把temp的数据给到了临时的匿名对象,  ,会调用这个临时匿名
32                         //对象的拷贝构造函数, 将temp穿进去。
33 }
34 
35 void test4() 
36 {
37     cout << "test4 begin " << endl;
38     func2();
39 
40     //匿名对象在此被析构了, 如果一个临时的匿名对象,没有任何变量去接收它,编译器认为这个临时匿名对象没有用处。
41     //编译器会立刻销毁这个临时的匿名对象
42     cout << "test4 end" << endl;
43 }
44 
45 void test5()
46 {
47     cout << "test5 begin ..." << endl;
48     Test t1 = func2();//如果有一个变量去接收这个临时的匿名对象, 编译器认为这个匿名对象转正了,就不会立刻给他销毁。
49                             //t1 = 匿名的临时对象 为什么不会发生拷贝构造
50                             //    此时的t1 去接收这个匿名的临时对象不是 重新创建一个t1 而是给这个匿名对象起个名字就叫t1
51                             //一旦这个匿名对象有了自己的名字,编译器就不会立刻给这个匿名对象销毁了,
52                             //就当普通局部变量处理了
53 
54     cout << "test5 end..." << endl;
55 
56     //在此时析构的t1
57 }
1 void test6()
2 {
3     cout << "test6 begin..." << endl;
4     Test t1; //调用t1的无参数构造函数
5     t1 = func2(); //调用的=号操作符 ,,t1 = 匿名对象。 调用了t1的=号操作符。
6                         //此时匿名没有被转正,匿名没有自己的名字, 匿名对象这个内存没有自己的别名, 编译器就会立刻销毁。
7     cout << "test6 end..." << endl;
8 }

 

转载于:https://www.cnblogs.com/eemjwu/p/8617505.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值