Nel mio codice uso una piccola classe di memorizzazione dei dati, creata in luoghi diversi. Per evitare perdite di memoria e di semplificare le cose, voglio usare il conteggio dei riferimenti, così ho fattoConteggio di riferimento per oggetti
type TFileInfo = class (TInterfacedObject, IInterface)
e rimosso tutte le mie chiamate manuali ai TFileInfo.Free. Sfortunatamente Delphi ha riportato molte perdite di memoria. Cercando sul così ho trovato la seguente questione spiegando perché questo non funziona:
Why aren't descendants of TInterfacedObject garbage collected?
C'è una soluzione presentata lì, ma mi richiede (almeno se ho capito bene) per scrivere un'interfaccia personalizzata IFileInfo e fornirlo con un sacco di getter e setter, che voglio evitare.
EDIT Vorrei aggiungere che inserisco il creare FileInfo oggetti in due diversi tipi di tabelle hash: una discendente da TBucketList e un altro è un'implementazione hash mappa dal forum CodeGear. Internamente entrambi i puntatori degli utenti, quindi la situazione è come nell'altra domanda.
C'è qualche altra possibilità di creare oggetti in Delphi usando il conteggio dei riferimenti?
Ma il compilatore genera il corretto inc/dec del tutto se inserisco tutti gli oggetti in una mappa hash? – jpfollenius
risposta modificata con informazioni aggiuntive – Kcats
Questo codice non viene compilato. Non è possibile connettere le interfacce agli oggetti. – dummzeuch