[ franjo_tahi @ 30.11.2010. 14:29 ] @
| Imam definiran qrreport i u njemu:
....
public
qi: array of TQRImage;
end;
u formi u kojoj kreiran qrreport keriram i komponente QTRImage je proc. kao ova:
fmMain.btnTempClick(Sender: TObject);
begin
....
qr := tqr.Create(nil);
for i := 0 to Broj do begin
SetLength(qr.qi, i+1);
qr.qi := TQRImage.Create(nil);
qr.qi.Parent := qr;
....
end;
....
qr.free;
end;
Zanima me: da li se nakon qr.free oslobađa i memorija zauzeta s TQRImage greiranum u array-u qi ili moram raditi za svaku free (qr.qi.free) ? |
[ Milos D @ 30.11.2010. 18:48 ] @
Verovatno se ne oslobađa.
Code:
qr.qi := TQRImage.Create(nil);
qr.qi.Parent := qr;
Verovatno si hteo
Code:
qi[i] := TQRImage.Create(nil);
qi[i].Parent := qr;
?
A ako staviš
Code:
qi[i] := TQRImage.Create(qr);
qi[i].Parent := qr;
Onda će qr kad pozoveš qr.Free da "pobije" sve slike jer ih vidi kao svoju "decu".
[ franjo_tahi @ 03.12.2010. 08:21 ] @
Nisam shvatio razliku.
qi je definiran kao public varijabla u qr-u
Mjenjanje veličine qi se radi u drugoj formi isto kao i creiranje svakog člana.
U čemu je razlika ako varijablu dinamički kreiram u jednoj ili drugoj formi, ako ona pripada qr-u?
Sličan problem:
Code:
procedure fmMain.NekaProc
var a: TQRImage;
begin
a := TQRImage.Create(nil);
....
end;
da li se nakon izlaska iz procedure oslobađa i varijabla a ?
[ savkic @ 03.12.2010. 12:53 ] @
> qi je definiran kao public varijabla u qr-u
A qr je neki unit ili klasa, to je nebitno.
> U čemu je razlika ako varijablu dinamički kreiram u jednoj ili drugoj formi, ako ona pripada qr-u?
Nebitno je gde je praviš i gde je definisana, bitno je ko je njen owner, ako staviš Create(nil), nema ownera i sam vodiš računa o oslobađanju memorije. Ako staviš Create(Form1_orSomeOtherComponent) vlasnik je ta komponenta i kada se ona uništava biće uništeni i svi objekti koji joj pripadaju. To je isto kao kada stavljaš kontrole na formu, ne vodiš računa o njihovom kreiranju i oslobađanju, to radi automatski forma.
> a := TQRImage.Create(nil);
> da li se nakon izlaska iz procedure oslobađa i varijabla a ?
Ne, ako hoćeš neki reference counting mehanizam (oslobađanje objekta kada se više ne koristi), možeš koristiti interfejse ali to onda unekoliko menja način upotrebe.
[ franjo_tahi @ 07.12.2010. 08:07 ] @
Zahvaljujem na odgovoru, ovo mi je jasno.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.