Оператор присваивания в C++
Присваивание через = между уже существующими
объектами вызывает оператор присваивания,
а не конструктор копирования. Без своей версии
компилятор снова копирует поля поверхностно.
Свой оператор записывают как User& operator=(const User& other).
Сначала проверяют, не тот ли это же объект
по адресу - иначе можно освободить свой буфер
и потерять данные при самоприсваивании.
Затем снимают старый new[], выделяют новый
блок и копируют содержимое из other.
В конце возвращают *this.
Запишем класс с деструктором и оператором присваивания:
class User {
public:
int* data;
User() {
data = new int[1];
data[0] = 5;
}
User& operator=(const User& other) {
if (this != &other) {
delete[] data;
data = new int[1];
data[0] = other.data[0];
}
return *this;
}
~User() {
delete[] data;
}
};
Сейчас создадим два объекта и присвоим один другому:
int main() {
User user1;
User user2;
user2.data[0] = 9;
user2 = user1;
std::cout << user2.data[0] << "\n";
return 0;
}
Перегрузите оператор присваивания в классе Slot
с полем int* на один элемент. Присвойте
один готовый объект другому и выведите число
из левого объекта после присваивания.