2012-03-30 55 views
2

可能重複:
Copy Constructor is not invoked複製構造不會被調用

# include <iostream> 

using namespace std; 

class Abc 
{ 

     public: 
     int a; 
     Abc() 
     { 
      cout<<"def cstr\n"; 
      a=10; 
     } 


     Abc(const Abc &source) 
     { 
       a=source.a; 
       cout<<"copy constructor is called"<<endl; 
     } 


}; 

int main() 

{ 

    Abc kk = Abc(); 
    cout<<kk.a<<endl; 
     return 0; 
} 

在上面的程序我的輸出是:

高清CSTR

在這裏,我預計複製構造函數會在未發生的默認構造函數之後調用。

請告訴我這是怎麼回事。是否因爲Abc()正在創建一個臨時對象?

如果我錯了,請糾正我。

謝謝!!!

回答

1

你的拷貝構造函數是好的,嘗試

int main() { 

     Abc kk; 
     Abc kk1 = kk; 
     cout<<kk.a<<endl; 
      return 0; 
    } 

拷貝構造函數被調用一次從另一個現有對象的構造。其他時間調用操作符被調用。通過說Abc kk = Abc();你只是調用默認的構造函數。