полное копирование одного экземпляра класса в другой, т. е. вместе с данными будет скопирована и область памяти, где эти данные расположены. А в структурах это работает точно также?
Что значит "вместе с данными будет скопирована и область памяти"?
Ну поля из копирующего экземпляра класса будут указывать на ту область памяти, где хранятся данные из копируемого экземпляра класса
А как тогда?
вы немного путаетесь. Скопируются значения указателей, а именно адреса со значениями. Обычные поля лежат на своих адресах
Вы сбросьте лучше пример, какой конкретно класс, структура вас интересует. Общий ответ на ваш вопрос займет слишком много места, проще объяснить на примере
Ручками или, русками самому копировать. Указатель ничего не знает о том, на что указывает, кроме типа.
Ааа, точно запутался здесь, спасибо, что объяснили
В идеале, у тебя в качестве полей должны лежать объекты, которые имеют конструктор копирования. Ты сам выбираешь что тебе удобно иметь в качестве полей (какие типы объектов), если эти объекты имеют конструктор копирования, то тебе для твоего класса не надо делать свой конструктор копирования. Каждый член (я могу немного ошибаться) сам скопируется за счет своего конструктора копирования. Иногда, есть такие объекты, которые нельзя скопировать, тогда тебе надо уже делать свой конструктор копирования и в нем, получив по ссылке класс из которого копируем, заполняем поля класса в который копируем. Не рекомендуется держать в качестве поля голый указатель (но ситуации разные бывают, иногда и нужно), если у тебя в качестве поля указатель, то он указывает на данные в куче. Если не делать свой конструктор копирования, в копии твоего класса будет тоже поле-указатель и в нем будет значение того же адреса, что и в экземпляре откуда ты копируешь. А тебе надо независимую копию. Поэтому ты в своем конструкторе копирования в классе, куда копируешь, в этот указатель сначала кладешь через new адрес места, куда будет ссылаться указатель (new выделяет область памяти под этот тип и отдает указатель на начало этого участка памяти), потом через разыменование присваиваешь само значение из старого указателя в место, куда указывает указатель в копии. Еше не забудь, если у тебя есть указатель, значит ты выделил память через new, то и в деструкторе не забудь прописать delete по этому указателю.
Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Да нет, у тебя просто данные скопируются из одной структуры в другую.
Оо, спасибо, что разъяснили насчёт этого
Обсуждают сегодня