Je ne sais pas précisément comment fonctionne les mécanisme de destruction d'un objet, c'est ce qui me pose problème.
J'ai un objet (visuel) créé dynamiquement, dont le propriétaire est un panel (dont son propriétaire est une TForm).
D'une part, je gère moi même sa destruction lorsqu'il le faut.
D'autre part, cet objet peut très bien être libéré également, si son propriétaire est lui même détruit. (exemple, je ferme l'appli).
je maintiens mes objets dans une liste (TObjectList), Liste qui est détruite systématiquement dans le finalize de l'unité.
Si je gère moi meme les destructions, pas de probleme.
Mais lorsque la destruction du propriétaire de mes objets est invoquée, je pense qu'il y a une 1ere phase de marquage des objets à libérer, avant la phase effective de libération.
Entre ces 2 phases, mon TObjectList est détruit -> et tente donc de détruire également mes objets.
Le problème, c'est que la fonction de destruction de mon TObjectList ne "sait" pas que ces objets sont en instance de destruction par les propriétaires (Objet pas à nil, ca s'est normal, mais surtout, tout est encore valide dans l'obtention de ses propriétés et méthodes, donc pas moyen de savoir s'il est en cours de destruction ou non).
Meme si je créé mes objets avec un propriétaire à Nil, L'application semble tenter de les libérer et se retrouvent dans le même état que précédemment.
J'ai bien trouvé une astuce, j'ai constaté que les controls visuels comme des panels à l'interieur de mes objets, étaient eux, libérés (panel=nil) par exemple.
-> j'imagine que les destructions "remontent".
Cette solution ne me plait pas car trop empirique et je suis pas sur de mon coup.
Donc, la question: Existe-il un moyen pour savoir si un objet est en cours de destruction. ie, à un moment donné, savoir si l'ordre de destruction de cet objet à été donné, bien que l'objet existe encore afin de ne pas donner un 2eme ordre de destruction sur cet objet (et une violation d'accès seulement un peu plus tard).
Merci
Partager