En mi código utilizo una pequeña clase de almacenamiento de datos, que se crea en diferentes lugares. Para evitar pérdidas de memoria y simplificar las cosas, quiero utilizar el recuento de referencias, así que lo hiceRecuento de referencias para los objetos
type TFileInfo = class (TInterfacedObject, IInterface)
y quitado todas mis llamadas manuales a TFileInfo.Free. Desafortunadamente Delphi reportó muchas pérdidas de memoria. Buscando en así que encontré la siguiente pregunta explicar por qué esto no funciona:
Why aren't descendants of TInterfacedObject garbage collected?
Hay una solución presentada allí, pero me obliga (al menos si lo consigo derecha) para escribir una interfaz personalizada IFileInfo y proporcionarle una gran cantidad de getters y setters, que quiero evitar.
EDITAR debo añadir que inserto el FileInfo crear objetos en dos tipos diferentes de tablas hash: uno que descienden de TBucketList y otro es una implementación mapa hash del foro Codegear. Internamente, ambos usuarios apuntan, por lo que la situación es como en la otra pregunta.
¿Hay alguna otra posibilidad de hacer que los objetos en Delphi usen recuento de referencias?
Pero, ¿el compilador genera las inc/dec correctas si inserto todos los objetos en un mapa hash? – jpfollenius
respuesta editada con información adicional – Kcats
Este código no se compila. No es posible encasillar interfaces a objetos. – dummzeuch