Newsgroup: it.comp.lang.delphi
Titolo: CreateForm ...

 a "freearle" alla chiusura dell'applicazione?
Dunque, se le crei tu dovresti preoccupartene tu.
In realtà comunque la memoria allocata dal processo viene liberata (tutta)
alla terminazione del processo stesso. Il fatto è che se tu crei (nel corso
dell'esecuzione) 30 volte la stessa form avrai in memoria 30 istanze di
quella classe. Capirai che se lo fai per n forms alla fine la memoria si
satura (sistema + lento, possibilità di crash [a lungo andare]...)
Quindi dovresti liberarle tu (per esempio come ho fatto io lì sopra
nell'OnClose...)
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

assigned() restituirebbe true.
Anche 
if ( Form1 = nil ) se e' per questo...
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------
#exclude <windows.h>

end;
Sicuro che sia OnClose e non OnDestroy ?


 Sicuro che sia OnClose e non OnDestroy ?
Ho sempre usato OnClose...
Sinceramente credo che sia indifferente: entrambi vengono richiamati _prima_
della distruzione dell'oggetto...
La cosa + pulita penso sarebbe farlo overridando il distruttore e farlo
_dopo_ aver richiamato inherited ma non vedo controindicazioni nel farlo
nell'OnClose/Destroy...
Ciao :-)
Ps: finalmente riesco a leggere i news, il mio provider sta facendo i fuochi
d'artificio!


della distruzione dell'oggetto...
Pero' attenzione : l'OnClose viene chiamato tutte le volte che la
finestra viene chiusa, che non e' equivalente a deallocarne le risorse
dalla memoria.  Il metodo piu' giusto e' mettere quelle istruzioni
nell'OnDestroy.

 nell'OnDestroy.
Vero in generale, ma guarda il mio codice: quell'istruzione che trovi prima
di assegnare la form a nil:
 action := caFree;
Ciao :-)


 action := caFree;
Non c'entra.
Se imposti Form2 a nil prima della distruzione del form, il sistema,
al momento della distruzione, andra' a cercare i membri di Form2 per i
quali deallocare memoria (nonche' il form stesso) e non potra'
accedervi in quanto il valore per Form2 e' stato reimpostato.

 accedervi in quanto il valore per Form2 e' stato reimpostato.
Difatti, io imposto Form2 a nil _dopo_ aver distrutto Form2...


Difatti, io imposto Form2 a nil _dopo_ aver distrutto Form2...
?
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  action := caFree; // libero l'istanza
  Form2 := nil; // ri-inizializzo il puntatore
end;
Il Form2 a Nil viene impostato nell'OnClose stesso.


 Il Form2 a Nil viene impostato nell'OnClose stesso.
Posto che, dall'help in linea di OnClose:
  To close and form and free it in an OnClose event, set Action to caFree.
Il fatto è che sebbene non ne sia sicurissimo, mi sembra di ricordare che il
parametro action che tu imposti non determina l'immediata distruzione della
Form (quindi effettivamente io imposto il puntatore Form2 a nil prima di che
questa venga fisicamente distrutta). Il fatto è che una volta impostata
action a caFree la form viene distrutta dall'interno ( = non viene +
sfruttato il puntatore Form2 che è una variabile ( puntatore )_esterna_
... )
Ripeto: non sono proprio sicurissimo che funzioni così ma so _per certo_ che
il mio procedimento è sicuro da un punto di vista della liberazione della
memoria.
Noto che ogni volta che ti scrivo qualcosa devo mettermi a giustificarmi:
che è ? non ti fidi ? ;-)
Ciao


che č ? non ti fidi ? ;-)
*mi* scrivi ? semmai scrivi al gruppo...se ribatto e' perche' non
credo sia giusto :)


 credo sia giusto :)
Beh, sei l'unico che mette in dubbio tutto ciò che scrivo.
Intanto però non mi pare di aver scritto castronerie... ;-P


Intanto perň non mi pare di aver scritto castronerie... ;-P
Non vorrei sembrare pedante, pero' fino ad ora non mi hai dimostrato
che quello che hai scritto non e' una castroneria.
Hai solo detto che sai _per certo_ che quella cosa funziona.
Ma se non ricordo male, sapevi anche _per certo_ che p^^ non
funzionava :)
Ti ripeto : ribatto a quello che scrivi tutte le volte, perche' tutte
le volte mi sembra che le cose non stiano cosi', ma non mi sembra il
caso di polemizzare ;)


 caso di polemizzare ;)
Beh, intanto ti ho corretto (a ragione) più volte. [cfr il thread su
"trovare il nome di un processo a partire dall'ID..." che è il primo che mi
viene in mente ].
Ti assicuro che scoccia doversi andare a prendere i riferimenti testuali
ogni volta che ti si deve dire "guarda che non è così": ci metto il doppio
del tempo a rispondere...
Direi che in tanto tempo che rispondo a messaggi sui newsgroup raramente ho
scritto boiate, quindi un minimo di fiducia potrebbe anche essermi
accordata. Ovviamente non è una pretesa.


accordata. Ovviamente non è una pretesa.
Viva la modestia !!! 
E vai ! anche stavolta ti sei meritato un bel IGNORE THREAD ! :)


 E vai ! anche stavolta ti sei meritato un bel IGNORE THREAD ! :)
Amen, non mi interessano le persone arroganti e supponenti come te.
