type
TSomeRecord = Record
field1: integer;
field2: string;
field3: boolean;
End;
var
SomeRecord: TSomeRecord;
SomeRecAr: array of TSomeRecord;
Questo è l'esempio più semplice di quello che ho e perché voglio riutilizzare SomeRecord
(con alcuni campi restanti vuoti, senza liberare tutto alcuni campi sarebbero stati riportati quando sono riutilizzando SomeRecord
, che è ovviamente indesiderato) Sto cercando un modo per liberare tutti i campi contemporaneamente. Ho iniziato con string[255]
e utilizzato ZeroMemory()
, che andava bene fino a quando non ha iniziato a perdere memoria, perché ho passato a string
. Mi manca ancora la conoscenza per ottenere il perché, ma sembra essere correlato al fatto che sia dinamico. Sto usando anche array dinamici, quindi presumo che provare ZeroMemory()
su qualcosa di dinamico possa causare perdite. Un giorno sprecato a capirlo. Penso di averlo risolto utilizzando Finalize()
su SomeRecord
o SomeRecAr
prima del , ma non sono sicuro che questo sia l'approccio corretto o solo che io sia stupido.Come liberare correttamente i record che contengono vari tipi in Delphi in una volta?
Quindi la domanda è: come liberare tutto in una volta? esiste una procedura unica per questo di cui non sono a conoscenza?
Su una nota diversa, in alternativa sarei aperto a suggerimenti su come implementare questi record in modo diverso per cominciare, quindi non ho bisogno di fare complicati tentativi di liberare materiale. Ho esaminato la creazione di record con New()
e quindi di eliminarlo Dispose()
, ma non ho idea di cosa significhi quando una variabile dopo una chiamata a Dispose()
non è definita, invece di zero. Inoltre, non so qual è la differenza tra una variabile di un certo tipo (SomeRecord: TSomeRecord
) rispetto a una variabile che punta a un tipo (SomeRecord: ^TSomeRecord
). Al momento sto esaminando i problemi di cui sopra, a meno che qualcuno non possa spiegarlo rapidamente, potrebbe volerci del tempo.
@NGLN Mi rendo conto che l'essenza di questa risposta è ciò che hai scritto in origine. Penso che sia stata una risposta eccellente. A mio parere è un peccato che tu l'abbia rimosso. Se hai ripristinato una risposta del genere, eliminerei questo e il tuo voto. Ma penso che questa domanda dovrebbe avere una risposta in questo senso. Preferirei che fosse tuo da quando eri il primo. –
concordato. Nessun duro, terrò il mio com'è adesso. – NGLN
@NGLN OK grazie per la comprensione e ho rimosso il mio downvote, che è stato duro. –