Re: Почему вызывается конструктор копирования?
От: FallAngel Украина  
Дата: 05.10.07 22:39
Оценка: +1 :))
Здравствуйте, na1s, Вы писали:

N>Явный косяк с логикой.

N>
N>#include <iostream>
N>using namespace std;
N>class A
N>{
N>public:
N>    A(){}
N>    A(const A &a){cout<<"1st";}
N>    A& operator =(A&){cout<<"2nd";}
N>};
N>int main()
N>{
N>    A b;
N>    A a=b;
N>    return 0;
N>}
N>

N>Почему печатает 1st, хотя должен 2nd? Этому есть разумное объяснение, почему сделано именно так?
Доброговремени суток. Проблема в том, что писать надо не:
   A b;
   A a=b;


   A b;
   A a;
   a = b;

тогда все работает
Происходит энто от того, что в первом случае компилятор производит инициализацию экземпляра класса и по энтому вызывает конструктор.По крайней мере похоже на то, потому что второй вариант работает и выводится 2nd
"...наставники более мудры не благодаря умению действовать, а потому, что они обладают отвлеченным знанием и знают причины..." Аристотель.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.