Как в Delphi правильно освобождать записи, содержащие разные типы одновременно?

type
  TSomeRecord = Record
    field1: integer;
    field2: string;
    field3: boolean;
  End;
var
  SomeRecord: TSomeRecord;
  SomeRecAr: array of TSomeRecord;

Это самый простой пример того, что у меня есть, и поскольку я хочу повторно использовать SomeRecord(при этом некоторые поля остаются пустыми, без освобождения всего, некоторые поля будут переносятся, когда я повторно использую SomeRecord, что явно нежелательно) Я ищу способ освободить все поля сразу. Я начал с string[255]и использовал ZeroMemory(), что было нормально, пока не началась утечка памяти, потому что я переключился на string. Мне все еще не хватает знаний, чтобы понять, почему, но, похоже, это связано с его динамичностью. Я также использую динамические массивы, поэтому я предполагаю, что попытка ZeroMemory()для чего-либо динамического приведет к утечкам. Один день потрачен впустую, чтобы понять это. Я думаю, что решил эту проблему, используя Finalize()на SomeRecordили SomeRecArдо ZeroMemory(), но я не уверен, что это правильный подход или я просто тупой.

Итак, вопрос: как освободить все сразу? существует ли какая-то единственная процедура для этого, о которой я не знаю?

С другой стороны, в качестве альтернативы я был бы открыт для предложений о том, как реализовать эти записи по-другому, чтобы начать с того, чтобы мне не нужно было предпринимать сложные попытки освобождения материала.Я изучал создание записей с помощью New(), а затем избавление от него Dispose(), но я понятия не имею, что это значит, когда переменная после вызова ] Dispose()не определен, а не равен нулю. Кроме того, я не знаю, в чем разница между переменной определенного типа (SomeRecord: TSomeRecord) и переменной, указывающей на тип (SomeRecord: ^TSomeRecord). В настоящее время я изучаю вышеуказанные проблемы, если кто-то не сможет объяснить это быстро, это может занять некоторое время.

15
задан Raith 16 June 2012 в 19:17
поделиться