临时变量调用拷贝构造函数的次数



          昨晚磊神的讲座讲了很多很纠结的问题。    

         今天就看了一下一直不懂的拷贝构造函数中,临时变量调用拷贝构造的次数问题。    

         下面用了昨晚的程序片段,当然我对一些地方进行了简化。。。  


     1 #include <iostream>                                                                                   
     2 #include <string>                                                               
     3                                                                                 
     4 using namespace std;                                                            
     5                                                                                 
     6 int i = 0;                                                                      
     7 struct A                                                                        
     8 {                                                                               
     9     int i_;                                                                      
    11     A() { i_ = i++; cout << "Construct: " << i_ <<endl; }                       
    12     A( const A& ) { i_ = i++; cout << "Copy: " << i_  <<endl; }                 
    13     ~A(){ cerr << "~A: " << i_ << endl;}                                        
    14 };                                                                              
    15                                                                                 
    16 A func()                                                                        
    17 {                                                                               
    18     cout << "in func" << endl;                                                  
    19     A tmp;                                                                      
    20     cout << "return func" << endl;                                              
    21     return tmp;                                                                 
    22 }                                                                               
    23 int main()                                                                      
    24 {                                                                               
    25     A a = func();                                                               
    26                                                                                 
    27     cout << "-----------" << endl;                                             
    28     return 0;                                                                   
    29 } 


运行结果:


【解释运行结果】

in func
Construct: 0 //【func里面的普通构造函数】
return func
Copy: 1//【xvalue,将一个xvalue的返回值调用一次拷贝构造函数作为临时变量,目的:给main函数里面的变量a赋值】
~A: 0//【func里面的普通构造函数对应的对象调用析构函数----已经作为返回值返回了,完成了它的使命】
Copy: 2//【调用A a的拷贝构造函数;A a = func(); 等价于 A a( func() )】
~A: 1//【析构xvalue,已经完成了使命了】
-----------
~A: 2//【析构A a】


昨晚还有关于左值引用和右值引用的知识,等我后面好好思考一下再挪到博客上来吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值