Особенности поведения структуры

1. Nio 70 13.04.20 10:56 Сейчас в теме
Несколько дней убил на то что бы разобраться в данном вопросе. Отлаживал выгрузку на сторонний веб сервис через пакеты XDTO. Долго не мог разобраться почему не работает. В итоге родился вот такой код.

Структура1 = Новый ФиксированнаяСтруктура("Значение, Массив"
										,"Значение структуры 1"
										,Новый Массив);
										
Структура2 = Новый Структура(Структура1);

Структура3 = Новый Структура(Структура1);
Структура3.Значение="Значение структуры 2";
Структура3.Массив.Добавить("Элемент массива");

Сообщить(Структура1.Массив.Количество());
Сообщить(Структура2.Массив.Количество());
Сообщить(Структура3.Массив.Количество());
Показать


Кто без подсказке сможет сразу сказать что будет сообщено пользователю?

Для меня это явилось полной неожиданностью, но я получил

1

1

1

Пробовал на платформе 8.3.16.1224
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 13.04.20 11:16 Сейчас в теме
(1) Дело не совсем в структурах. Вот аналогичный код, который даст ровно тот же результат:
Массив1 = Новый Массив;

Массив2 = Массив1;
Массив3 = Массив1;

Массив1.Добавить("Значение");

Сообщить(Массив1.Количество());
Сообщить(Массив2.Количество());
Сообщить(Массив3.Количество());
Показать

Переменная Массив1 по сути содержит в себе ссылку на некоторую область данных, где и хранятся элементы массива. Когда мы присваиваем переменной Массив2 значение Массив1, мы копируем лишь ссылку. Сами данные остаются неизменными, не копируются, а лежат все в той же области оперативной памяти, что и раньше. Соответственно меняя по ссылке данные массива, мы увидим это изменение для любых ссылок, что имеются в подпрограмме.

Аналогично и с Вашими структурами. При копировании структуры копируются их ключи и значения. В качестве значений выступают не сами элементы массива, а лишь ссылка на область данных, где эти значения элементов массива хранятся. Потому и кажется, что массивы в структурах меняются синхронно. На самом деле это все один и тот же массив.
Xershi; +1
3. Nio 70 13.04.20 12:29 Сейчас в теме
(2)
Аналогично и с Вашими структурами. При копировании структуры копируются их ключи и значения. В качестве значений выступают не сами элементы массива, а лишь ссылка на область данных, где эти значения элементов массива хранятся. Потому и кажется, что массивы в структурах меняются синхронно. На самом деле это все один и тот же массив.

Я примерно так и понял. Просто на осознания этого у меня ушло много времени. Ожидаешь несколько другого поведения.
+
4. muskul 14.04.20 04:29 Сейчас в теме
Помню так же хотел таблицу значений скопировать.
+
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот