170 похожих чатов

Добрый день, возник следующий вопрос: без перегрузки оператора "=" осуществляется

полное копирование одного экземпляра класса в другой, т. е. вместе с данными будет скопирована и область памяти, где эти данные расположены. А в структурах это работает точно также?

13 ответов

26 просмотров

Что значит "вместе с данными будет скопирована и область памяти"?

Ярослав- Автор вопроса

Ну поля из копирующего экземпляра класса будут указывать на ту область памяти, где хранятся данные из копируемого экземпляра класса

Ярослав- Автор вопроса
🐈
Эмм, нет

А как тогда?

Ярослав
А как тогда?

вы немного путаетесь. Скопируются значения указателей, а именно адреса со значениями. Обычные поля лежат на своих адресах

Ярослав
А как тогда?

Вы сбросьте лучше пример, какой конкретно класс, структура вас интересует. Общий ответ на ваш вопрос займет слишком много места, проще объяснить на примере

Ярослав
А как тогда?

Ручками или, русками самому копировать. Указатель ничего не знает о том, на что указывает, кроме типа.

Ярослав- Автор вопроса
Stepan Zorin
вы немного путаетесь. Скопируются значения указате...

Ааа, точно запутался здесь, спасибо, что объяснили

В идеале, у тебя в качестве полей должны лежать объекты, которые имеют конструктор копирования. Ты сам выбираешь что тебе удобно иметь в качестве полей (какие типы объектов), если эти объекты имеют конструктор копирования, то тебе для твоего класса не надо делать свой конструктор копирования. Каждый член (я могу немного ошибаться) сам скопируется за счет своего конструктора копирования. Иногда, есть такие объекты, которые нельзя скопировать, тогда тебе надо уже делать свой конструктор копирования и в нем, получив по ссылке класс из которого копируем, заполняем поля класса в который копируем. Не рекомендуется держать в качестве поля голый указатель (но ситуации разные бывают, иногда и нужно), если у тебя в качестве поля указатель, то он указывает на данные в куче. Если не делать свой конструктор копирования, в копии твоего класса будет тоже поле-указатель и в нем будет значение того же адреса, что и в экземпляре откуда ты копируешь. А тебе надо независимую копию. Поэтому ты в своем конструкторе копирования в классе, куда копируешь, в этот указатель сначала кладешь через new адрес места, куда будет ссылаться указатель (new выделяет область памяти под этот тип и отдает указатель на начало этого участка памяти), потом через разыменование присваиваешь само значение из старого указателя в место, куда указывает указатель в копии. Еше не забудь, если у тебя есть указатель, значит ты выделил память через new, то и в деструкторе не забудь прописать delete по этому указателю.

The Pressbraker
В идеале, у тебя в качестве полей должны лежать об...

Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

Ярослав
Ну поля из копирующего экземпляра класса будут ука...

Да нет, у тебя просто данные скопируются из одной структуры в другую.

Ярослав- Автор вопроса
The Pressbraker
В идеале, у тебя в качестве полей должны лежать об...

Оо, спасибо, что разъяснили насчёт этого

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта