Конструктор копіювання використовується для ініціалізації раніше неініціалізованих об'єкт з даних якого - то іншого об'єкта.
A(const A& rhs) : data_(rhs.data_) {}
Наприклад:
A aa;
A a = aa; //copy constructor
Оператор присвоювання використовується для заміни даних в раніше инициализирован об'єкт з даними якого - то іншого об'єкта.
A& operator=(const A& rhs) {data_ = rhs.data_; return *this;}
Наприклад:
A aa;
A a;
a = aa; // assignment operator
Ви можете замінити побудову копій на конструкцію за замовчуванням плюс призначення, але це буде менш ефективно.
(Як додаткове зауваження: мої реалізації вище є саме тими, які компілятор надає вам безкоштовно, тому не було б особливого сенсу реалізовувати їх вручну. Якщо у вас є одна з цих двох, швидше за все, ви керуєте деяким ресурсом вручну. У такому випадку, згідно Правила трьох , вам, швидше за все, також знадобиться інший плюс деструктор.)