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