Как освободить объект, который находится в записи?

Здесь у меня сложная ситуация, я думаю. Мне нужно иметь возможность освободить объект, который является полем записи. Я обычно писал бы код очистки в деструкторе, если бы это был класс. Но так как типы записей могутввести "деструктор»как можно было бы позвонитьTObject (поле) .Free; ?

Там'я буду предсказывать два типа использования:

Замена записи на новую.

Я думаю, что это использование было бы легко реализовать. Поскольку записи являются типами значений и поэтому они копируются при присваивании, я могу перегрузить оператор присваивания и освободить объекты, принадлежащие старой записи. (

Редактировать: Перегрузка назначения не былаТаблица. Тот'новая информация для меня ..)

Выход из области, где определена переменная записи.

Я могу подумать о закрытом методе, который освобождает объекты, и этот метод можно вызывать при возбуждении области видимости вручную. НО, вот тот же вопрос: как сделать его большерекордно? Такое поведение похоже на класс ...

Вот образец (и, очевидно,не по назначению):

TProperties = record
  ... some other spesific typed fields: Integers, pointers etc..
  FBaseData: Pointer;

  FAdditionalData: TList;
  //FAdditionalData: array of Pointer; this was the first intended definition
end;

Предполагать,

FAdditionalData:=TList.Crete;

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

procedure TFormX.ButtonXClick(Sender: TObject);
var
  rec: TProperties;
begin
  //rec:=TProperties.Create(with some parameters);

  rec.FAdditionalData:=TList.Create;

  //do some work with rec
end;

После выхода из области действия ButtonClickзапись не более, чемTList все еще сохраняет свое существование, что вызывает утечки памяти ...

Ответы на вопрос(2)

Ваш ответ на вопрос