В вашем коде есть ошибки. Ваш конструктор копирования должен занять const&
. Ссылка позволит избежать создания копии (что вы не сможете сделать, будучи конструктором копирования), и она должна быть const
, поскольку вы не изменяете ее:
vector3(const vector3&);
Временные переменные могут быть связаны с const&
, но не может быть привязанным к изменяемой ссылке. То есть со своим кодом вы могли бы сделать:
vector3 a;
vector3 b(a);
но не:
vector3 a(some_calculation()); // some_calculation returns a vector3
Кроме того, ваш operator=
неверен. Как и конструктор копирования, он обычно должен принимать const&
, , но должен возвращать ссылку на this
. Вот как работает цепочка:
int a, b, c;
a = b = c = 0;
// a.operator=(b.operator=(c.operator=(0)));
Возвращение временного неортодоксально и ничего не дает. В вашем случае вы можете назначать снова и снова и никогда не изменять значение. Weird
vector 3 a, b;
a = b; // doesn't change a...?!
operator=
необходимо изменить this
.