Newsgroup: it.comp.lang.delphi
Titolo: Come usare la DISPOSE su una lista

Supponiamo che io debba scrivere una procedura per cancellare un dato
elemento da una lista. Allora, cerco lelemento, sposto in maniera adeguata i
collegamenti dei puntatori, ma poi come faccio a far si che quell'elemento
non rimanga esistente e mi occupi memoria inutilizzabile dato che l'elemento
e scollegato da ogni puntatore?
si puo' usare la dispose e come?
grazie

 ha scritto nel messaggio:

semplicemente con:
Dispose (Puntatore)
cmq fai attenzione quando dereferenzi un puntatore, prima devi prendere i
dovuti accorgimenti ... supponi che hai una lista cosě organizzata
Elemento 1                            Elemento 2                    Elemento
3
Puntatore  ---------------->  Puntatore ----------->   Puntatore
campi supplementari             campi supplementari       campi
supplementari
se devi eliminare l'elemento 2 devi prima assegnare a P(1) il valore di P(2)
in modo che P(1) punti a P(3) ... se non prendi questo accorgimento
cancellando l'elemento X della lista perdi anche tutti gli elementi da X+1 a
N (N = lunghezza lista).
Per informazioni supplementari su Dispose (e su come gestire le eccezioni
EInvalidPointer) ti rimando all'Help di Delphi (voce Dispose)
Saluti
--
- Carlo -
c.b...@libero.it

 dovuti accorgimenti ... supponi che hai una lista cosě organizzata
visto che dal grafico non si capiva nulla ti rifaccio la struttura
El 1              El 2             El 3
P(1) ------> P(2) ------>P(3) --> ...
altri campi    altri campi    altri campi


 dovuti accorgimenti ... supponi che hai una lista così organizzata
[...]
Chiedo scusa, al solito, per l'intrusione.
Chiedo anche scusa perche' non e' una risposta diretta alla domanda, ma
visto che la VCL esiste, perche' non usare TList (e discendenti), e
TObject (o discendenti) al posto dei record?
(si veda, ad es, la unit contnrs.pas (dove sono implementate tra l'altro
una Queue, uno stack e una TComponentList)
(la risposta diretta sarebbe: perche' preoccuparsi della dispose se usando
la vcl non ce n'e' bisogno?)
Saluti
Paolo Arosio


Quasi sempre e' vero: bisognerebbe sapere a cosa gli serve e come usa
la lista.
TList e' ottima per una lista ad esempio LIFO o senza cancellazioni
massive di items in mezzo o all'inizio dell'array, ma ti sfido a
utilizzarla come FIFO con qualche migliaia - o ancor di piu' -   di
puntatori.
Fermo restando che, ripeto, nel 99% dei casi va benissimo.
Ciao,
Massimo.
-- 
"Ciao Rex, che cavolo di situazione eh? Due dentro, due fuori, puo' succedere di tutto!"

 Fermo restando che, ripeto, nel 99% dei casi va benissimo.
Fortunatamente non ho mai dovuto occuparmi troppo delle prestazioni della
vcl (ne' di altre librerie), cmq vedo il punto.
Saluti
Paolo Arosio

 la vcl non ce n'e' bisogno?)
Esatto! Tuttavia l'informazione richiesta era su come utilizzare Dispose e
la risposta la ho data a quella domanda.
Forse avresti dovuto segnalare al diretto interessato questo pensiero, e non
a chi gli ha dato una risposta! :)
Saluti! :)


 a chi gli ha dato una risposta! :)
Sulla questione specifica dell'aver attaccato la risposta al tuo
messaggio:
grazie per il _richiamo_ ;)
Speriamo solo che Federico abbia seguito questo thread e non il
suggerimento di iGor -as is- (cioe' senza la preventiva sconnessione del
nodo dalla lista).
In effetti, poi, la mia frase fra parentesi "(la risposta diretta sarebbe:
perche' preoccuparsi della dispose se usando la vcl non ce n'e' bisogno?)"
non aveva ragione di essere, dato che non so, come ha giustamente
puntualizzato Massimo Pini, da quale problema effettivo nasca la
richiesta.
A mia ulteriore discolpa :) posso solo dire che personalmente trovo +
interessante una risposta che mi costringe ad andare a vedere l'help (o a
chiedere ulteriori delucidazioni) (ma mi risparmia dallo scrivere codice
che e' +/- reinvenzione della ruota) rispetto ad una che mi dice "si fa
cosi'" (non mi riferisco direttamente alla tua, beninteso).
Nel primo caso posso dire "ho imparato qualcosa", nel secondo pure, ma un
po' in tono minore (sempre imo).
Saluti <G>
Paolo Arosio



Spesso mi dimentico che, purtroppo, usando la scrittura molte
sfumature vengono perse: il mio messaggio non voleva avevere alcuna
vena polemica.


 cosi'" (non mi riferisco direttamente alla tua, beninteso).
Su questo mi trovi d'accordo, e per quanto tu mi faccia notare che il "si fa
così" non è riferito alla mia risposta, aggiungo (a mia discolpa) che il
collegamento all'Help c'era:" Per informazioni supplementari su Dispose (e
su come gestire le eccezioni EInvalidPointer) ti rimando all'Help di Delphi
(voce Dispose)" :)
Saluti! <g>


 vena polemica.
Ne' come tale l'ho considerato.
Buona Pasqua e
Saluti
Paolo Arosio