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

А если нужна именно копия, с которой ты будешь работать

- менять или еще что-то ?

11 ответов

5 просмотров

Ну так если я изменю в одном месте, измениться же и в другом? Если не так то поправьте Так же и со ссылками

zjoss
Ну так если я изменю в одном месте, измениться же ...

конструктор копирования обычно выдает независимую копию, которая не видит изменения оригинала

Mikail Bagishov
конструктор копирования обычно выдает независимую ...

В ходе изучения узнал что данные лежат по тому же адресу что и были скопированы, значит если я их изменю, измениться и в том месте откуда копировал, так ведь?

zjoss
В ходе изучения узнал что данные лежат по тому же ...

> В ходе изучения узнал что данные лежат по тому же адресу что и были скопированы, Что? Нет

zjoss
В ходе изучения узнал что данные лежат по тому же ...

Может имеется ввиду, что если конструктор копирования не определить, то копирование будет выполняться конструктором копирования от компилятора, в таком случае будет побитовое копирование ( поля будут идентичны ). Тогда да, 2 адреса на одни и те же данные.

Sergey
Может имеется ввиду, что если конструктор копирова...

Дефолтный конструктор поля копирует не побитово, а с помощью их конструктора копирования.

Mikail Bagishov
> В ходе изучения узнал что данные лежат по тому ж...

В ходе изучения как работает твоя программа или вообще ты говоришь, про случай, когда член класса это указатель, и если ты не написал для этого класса конструктор копирования, то конечно, компилятор просто сделает битовую копию (он создаст конструктор копирования, но он толком не скопирует, он тупо скопирует в новый указатель тот же адрес что и в старом). Тогда, да - у тебя в копии объекта будет лежать уже новый член класса указатель, но адрес в нем будет тот же. Оба экземпляра класса будут ссылатся одно и то же место в памяти. Чтобы все скопировалось правильно, надо или иметь в качестве членов твоего класса не голые указатели, а объекты, которые умеют себя копировать правильно, в случае если они владеют ресурсом). Или же если все таки твой класс, имеет указатель на данные в куче, то соотвественно, делаешь конструктор копирования для твоего класса, чтоб он этот конструктор копирования создавал в куче место под данные (запрашивал память через new), и потом копировал те данные, что лежат у указателе-члена того объекта откуда ты будешь копировать в уже новое место в памяти, куда ссылается указатель объекта в который будут копироваться данные. А теперь внимание! Первое что надо понять, что когда говорят, что из одного объекта данные копируются в другой, по факту данные копируются не в объект, а они кладутся в память под названием куча . То есть на самом деле объекты в с++ это дескрипторы ресурсов, то есть в них по факту хранятся не данные, а указатели на данные, а сами данные лежат в куче. Даже если ты используешь контейнеры, по факту они тоже внутри себя просят через оператор new выделить им место в той памяти, которую я назвал куча (не знаю почему, но мне нравится это слово), и в объекте просто хранится указатель на это место в памяти (ну и как правило еще хранится служебная информация, например, размер массива или индекс итератора). То есть по факту объекты хранят данные опосредовано, данные хранятся в памяти. Скажу больше, при некорректном написании деструктора и вообще программы в целом, легко может получиться ситуация, когда объекта уже нет, а данные, указатель на которые он хранил еще существуют в куче, так как их никто оттуда не удалил (вернее, не освободил). Так что имей ввиду, что объекты в с++ сами в себе данные не хранят. Они хранят бумажки (указатели) в которых написано по какому адресу надо идти, чтоб забрать свои данные.

Mikail Bagishov
Дефолтный конструктор поля копирует не побитово, а...

Это,кстати, очень классно. Это реальная крутая фишка.

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
I just installed it but how do I use it?
Talula
12
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Приветствую всех, возникла проблема, до этого писал бота в простом формате где при выполнении условий приходило через send_message информация, сейчас решил добавить хендлер на...
Andrew
4
Good afternoon, I just started learning php in conjunction with mysql. I am registering a system on a local Mamp server using phpMyAdmin. It seems to be stored normally in the...
ManGo
1
Карта сайта