Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpOpCpCA 42 of 150 menu
◀ ▶

Оператор присваивания в 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* на один элемент. Присвойте один готовый объект другому и выведите число из левого объекта после присваивания.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить