Ver Mensaje Individual
  #45  
Antiguo 08-04-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Reputación: 19
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por Al González Ver Mensaje
Es interesante lo que planteas y en más de una ocasión me he preguntado cómo resolverlo, ya que Delphi no tiene un mecanismo directo para evaluar si una referencia de objeto es aún válida o un simple puntero hacia donde estuvo una instancia que ya fue destruida.
...
Veo que me has entendido perfectamente....
Cita:
Empezado por Al González Ver Mensaje
Pero ahora que vuelvo a leer el planteamiento de parte tuya, recordando que GetMem y FreeMem son las funciones que utiliza nativamente una clase para reservar y liberar el bloque de memoria de la instancia, y que tales funciones son reemplazables , se antoja posible implementar una especie de lista de punteros liberados, para buscar en esa lista la dirección contenida en una variable objeto no Nil, y con ello determinar si se trata de un objeto que ya fue destruido o no.
...
Pues creo que estamos muy cerca de dar con una solucion, aunque pienso que ésto ya debió pensarse cuando Delphi se estaba construyendo y que los creadores de Delphi ya debieron darle una solucion, o por lo menos tener alguna rutuna que la lo haga, pero que sea el programador quien decida si la usa o no.., en fin....si GetMem y FreeMem son reemplazable pues creo y viendo la situacion tenemos dos caminos posibles para una solucion(segun yo)
  1. Tener alguna rutina que cuando se libera un determinado Objeto con FreeMen, su referencia apunte a null;está solucion sería la primera que se estaba discutiendo y sería tener una rutina muy similar al FreeMem, es más podriamos escribir nuestra propia version de FreeMen, mas o menos de la siguiente Forma:
    Código Delphi [-]
    procedure MyFreeMem(var P: Pointer[; Size: Integer]);
    begin
       FreeMem(P);//aqui llamamos a nuestra la funcion normal
       P:=nil;//hacermos que P sea Nulo  ésta linea podría ser nuestra solucion
    end;
    Lógicamente tendriamos que hacer que se ejecute nuestra "nueva" version de FreeMem en código fuente de Delphi.
  2. Implementar algun mecanismo(rutina) que permita saber si una referencia apunta a un objeto destruido o no; lo cual viendolo más a fondo me parece que sería más engorroso, pero no imposible dado tu ejemplo que propones en el anterior post.
La cuestion es que de una u otra forma se solucione...
Como podrás ver, si se puede lograr la primera opcion creo que ya la cosa se soluciona...ALELUYA.. ¿verdad? o como lo vés tú amigo Alberto, ya que tú tienes mas experiencia que yo, pues eres un tremendo bibliotecarioy yo solo soy un simple aprendís
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita