Salve,
vorrei sapere un vostro parere in merito ad una questione .
Ho creato due classi del tipo
Se io eseguo il codice sottostantecodice:type TIndirizzo = class constructor create; private nome:string; cognome:string; citta:string; via:string; cap:string; protected procedure leggi(info:string); public property getnome: string read nome; property getcognome: string read cognome; property getcitta: string read citta; property getvia: string read citta; property getcap: string read citta; end; TlistaIndirizzi = class constructor create(nf:string); private indirizzi: array of TIniridzzo; public procedure get_indirizzo(nome:string;cognome:string):TIndirizzo; end; .... implementation procedure Tindirizzi.leggi(info:string); begin nome:=copy(info,1,10); nome:=copy(info,20,10); cognome:=copy(info,30,10); citta:=copy(info,40,10); via:=copy(info,50,10); cap:=copy(info,60,10); end; .. procedure TListaIndirizzi.create(nf); var t:textFile; i:integer; riga:string; begin i:=0; assignFile(t,nf); reset(t); while not eof(t) do begin readln(t,riga); SetLength(indirizzi,i+1); indirizzi[i]:=TIndirizzo.create; indirizzi[i].leggi(riga); inc(i); end; closeFile(t); end; ... var ListaInd:TlistaIndirizzi; indirizzo:Tindirizzo;
Ottengo che il metodo free non solo cancella la variabile "indirizzo" ma anche "ListaInd.indirizzi[i]"!codice:... indirizzo:=Tindirizzo.create; ListaInd:=TlistaIndirizzi.create('indirizzi.txt'); indirizzo:=ListaInd.get_indirizzo('Mario','Rossi'); showmessage(indirizzo.getcitta); indirizzo.free; ...
Questo mi fa pensare che ad "indirizzo" non venga passato il valore di ListaInd.indirizzi[i], ma l'indirizzo di memoria come se fosse un puntatore.. ma perchè? è normale?
P.S.
Il codice è un esempio semplificato di quello che fa la mia classe, non è il codice reale!


Rispondi quotando