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

Конструктор копирования в C++

Копии полей не хватает, если в объекте указатель на свой массив: оба объекта смотрели бы в один буфер. Тогда пишут свой конструктор копирования. Он принимает ссылку на другой объект того же класса. Объявляют его как User(const User& other) внутри класса.

Для указателя на динамический массив в конструкторе копирования выделяют свой блок new[] и переносят элементы из исходного буфера. После такой глубокой копии адреса в полях у двух объектов различаются.

Запишем класс User с конструктором копирования:

class User { public: int* data; User() { data = new int[2]; data[0] = 1; data[1] = 2; } User(const User& other) { data = new int[2]; data[0] = other.data[0]; data[1] = other.data[1]; } ~User() { delete[] data; } };

Сейчас создадим объект и его копию:

int main() { User user1; User user2 = user1; std::cout << (user1.data == user2.data) << "\n"; std::cout << user2.data[0] << "\n"; return 0; }

Добавьте конструктор копирования в класс Note с полем int* на два элемента. Скопируйте объект и выведите 0, если адреса полей разные.

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