Ваш оператор присваивания должен возвращать Point &
не Point
, и он должен также принимать параметр в качестве справки:
Point &operator = (const Point &p) { return *this; }
В противном случае может возникнуть ненужное копирование. Скорее всего, создается одна копия, поступающая в оператор присваивания, тогда возвращаемое значение копируется как на p2
, так и на p1
.