2012-03-30 7 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; 
} 

В приведенной выше программе мой вывод:

Защиту ПРМ

Здесь я ожидал, что конструктор копирования будет вызван после конструктора по умолчанию, которого не происходит.

Пожалуйста, расскажите мне, что происходит здесь. Это потому, что Abc() создает временный объект?

Пожалуйста, исправьте меня, если я ошибаюсь.

спасибо !!!

ответ

1

Ваш конструктор копирования нормально, попробуйте что

int main() { 

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

конструктор копирования вызывается один раз на строительство другого существующего объекта. Вызывается другой оператор присваивания. Говоря Abc kk = Abc();, вы просто вызываете конструктор по умолчанию.

Смежные вопросы