Сообщение Re[4]: Подходы с присвоением больших сложных массивов от 11.09.2023 19:41
Изменено 11.09.2023 19:42 swame
Re[4]: Подходы с присвоением больших сложных массивов
Здравствуйте, Khimik, Вы писали:
K>Здравствуйте, swame, Вы писали:
A>>>Но в такой системе при изменении структуры "все данные" ссылки могут потерять актуальность и привести к SegFault.
A>>>Поэтому я храню не ссылки, а индексы в массиве. Индекс можно хотя бы проверить перед использованием.
S>>Для исключения ссылок на сдестроенные объекты я регистрирую объекты в коллекции TDictionary<int64, TObject>
S>>Объяетам назначаются идентификаторы int64, при создание объекта он регистрирует себя в коллекции, при дестрое удаляется оттуда.
S>>в ссылках между объектами хранятся не указатели, а эти идентификаторы.
S>>Массив не годится там где объекты постоянно создаются — удаляются
K> Сорри, не очень пока понимаю как это работает. А в чём разница, если дестроить объекты не через xxx.free, а через это:
K>
K>Здравствуйте, swame, Вы писали:
A>>>Но в такой системе при изменении структуры "все данные" ссылки могут потерять актуальность и привести к SegFault.
A>>>Поэтому я храню не ссылки, а индексы в массиве. Индекс можно хотя бы проверить перед использованием.
S>>Для исключения ссылок на сдестроенные объекты я регистрирую объекты в коллекции TDictionary<int64, TObject>
S>>Объяетам назначаются идентификаторы int64, при создание объекта он регистрирует себя в коллекции, при дестрое удаляется оттуда.
S>>в ссылках между объектами хранятся не указатели, а эти идентификаторы.
S>>Массив не годится там где объекты постоянно создаются — удаляются
K> Сорри, не очень пока понимаю как это работает. А в чём разница, если дестроить объекты не через xxx.free, а через это:
K>
K>procedure FreeObject(var obj:pointer);
K>begin
K> tobject(obj).Free;
K> obj:=nil;
K>end;
Тут ты обнудяешь только одну конкретную переменную указатель.
А на один и тот же объект могут ссылаться много указателей из разных мест.
Здесь обнулится только один указатель, в остальных переменных останется указетель на мусор.
K>..
K>freeobject(xxx);
K>
Re[4]: Подходы с присвоением больших сложных массивов
Здравствуйте, Khimik, Вы писали:
K>Здравствуйте, swame, Вы писали:
K> Сорри, не очень пока понимаю как это работает. А в чём разница, если дестроить объекты не через xxx.free, а через это:
Тут ты обнуляешь только одну конкретную переменную-указатель.
А на один и тот же объект могут ссылаться много указателей из разных мест.
Здесь обнулится только один указатель, в остальных переменных останется указетель на мусор.
K>..
K>freeobject(xxx);
K>[/code]
K>Здравствуйте, swame, Вы писали:
K> Сорри, не очень пока понимаю как это работает. А в чём разница, если дестроить объекты не через xxx.free, а через это:
Тут ты обнуляешь только одну конкретную переменную-указатель.
А на один и тот же объект могут ссылаться много указателей из разных мест.
Здесь обнулится только один указатель, в остальных переменных останется указетель на мусор.
K>..
K>freeobject(xxx);
K>[/code]