Salve,
vorrei sapere un vostro parere in merito ad una questione .
Ho creato due classi del tipo
codice:
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;
Se io eseguo il codice sottostante
codice:
...
indirizzo:=Tindirizzo.create;
ListaInd:=TlistaIndirizzi.create('indirizzi.txt');
indirizzo:=ListaInd.get_indirizzo('Mario','Rossi');
showmessage(indirizzo.getcitta);
indirizzo.free;
...
Ottengo che il metodo free non solo cancella la variabile "indirizzo" ma anche "ListaInd.indirizzi[i]"!
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!