Как правильно освободить записи, которые содержат различные типы в 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
). Я сейчас изучаю вышеупомянутые проблемы, если кто-то не может объяснить это быстро, это может занять некоторое время.