Newsgroup: it.comp.lang.delphi
Titolo: uso di AddObject

Ciao,
   non ho ben capito come usare il comando in oggetto per una TStringList.
   Esempio
     Lista.AddObject(ID, TipoOggetto(Oggetto));
   Se uso la TipoOggetto.Create per allocare l'oggetto per quanto questo 
rimane allocato?
   Nel modulo o solo nella procedura dove avviene la create?
Spero di essermi spiegato bene.
Grazie


Rimane allocato fino a quando non fai una Free !!
Cosa che prima o poi devi fare prima di chiudere il programma, se no
rimane allocata anche dopo :-)
Ciao

rimane allocata anche dopo :-)
Anche *dopo* quando? quando il programma termina tutte le risorse
vengono rilasciate.

 
OK, è quello che pensavo ma credevo che alla chiusura della form che lo 
aveva generato partissero in automatico le free.
Quindi dovrò farmi un for e fare il free a tutti gli oggetti allocati.
Grazie



Anche se l'oggetto caricato nel TStringList in questione era una
connessione aperta ad un DB  (tipo un  TSQLConnection) ?
La memoria allocata dall'applicazione verrà anche rilasciata ma la
connessione non rimane nel limbo sul server del DB?
In altre parole il "destructor" degli oggetti caricati nello
TStringList viene mai eseguito?
Ciao

TStringList viene mai eseguito?
No, il distruttore non viene eseguito, ma deallocare e distruggere
sono due verbi assolutamente separati e distinti.
Bada bene che anche a me preme insegnare a chiunque si accosti a
Delphi che quando si alloca un oggetto, bisogna poi sempre ricordarsi
di fare una Free() da qualche parte. Questa vale come regola generale
di buona programmazione (anche perché se si cominciassero a fare
eccezioni, nascerebbero problemi seri; molto meglio ricordarsi un
unico modo di lavorare). Questo però non vuol dire che quando il
processo termina, il sistema operativo non chiuda tutte le risorse e
non si riprenda la memoria allocata dall'applicazione. D'altronde se
la memoria allocata rimanesse tale anche alla chiusura di un processo,
basterebbe aprire processi a ripetizione per far andare in crash,
prima o poi, il sistema operativo.

aveva generato partissero in automatico le free.
La form non ha controllo su qualunque istanza di oggetto creata in uno
dei suoi metodi. E' responsabile solo dei componenti che vengono
creati con lei come owner.
Per una TStringList, se ci pensi bene, è giusto che il comportamento
standard non sia quello di deallocare in automatico gli oggetti,
perché gli AddObject() potrebbero limitarsi ad aggiungere istanze di
oggetti la cui esistenza è controllata altrove.

di fare una Free() da qualche parte.
Credo che lo sviluppo dell'argomento abbia sortito proprio questo
risultato, fa piacere di tanto in tanto scendere in questi dettagli
piuttosto che ripetere sempre come si fa a lanciare un'applicazione,
oppure cosa usare per accedere ad una seriale, ecc... ecc...
Dico bene?
Ciao

una connessione al db, ma potemmo fare altri esempi.
Da questo punto di vista sono ovviamente d'accordo, io mi riferivo
alla memoria allocata in sé. Se invece volevi dire che è bene
rilasciare le risorse, mi trovi d'accordissimo, anche perché Delphi
purtroppo soffre di ciò di cui soffrono molti linguaggi come lui e
cioè l'impossibilità di implementare correttamente l'idioma RAII, che
garantisce il rilascio di una risorsa in modo sicuro.