Конструктор копирования в 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, если адреса полей
разные.