Owner = nil, a alokacja pamięci

0

Witajcie

Mam pytanie odnośnie tworzenia obiektów lokalnych.

Jeśli stworzę kontrolkę w następujący sposób:

procedure TMyForm.proc1();
var
	b: TButton;
begin
	b := TButton.Create(nil);
	b.parent := self;
end;

Dlaczego button po wyjściu z procedury nie znika? Przecież jest lokalny a jako ownera dostaje nil, a więc nie ma na niego uchwytu... nie da się go zniszczyć?

1

znika tylko lokalna zmienna "b" która jest wskaźnikiem na obiekt
obiekty nie są lokalne i nie znikają same, musisz je zwolnić - Ty lub obiekt który jest ich właścicielem (i w funkcji niszczącej zniszczy też swoje dzieci)
w tym przypadku nie podajesz właściciela, więc musisz zwolnić samemu

tutaj po wyjściu z procedury możesz go zniszczyć tylko znajdując go w jakiś sposób (zdaje się że doda się na przykład do MyForm.Components / Controls - nie pamiętam)
w taki sposób właśnie między innymi powstają wycieki pamięci

tutaj: http://pl.wikipedia.org/wiki/Wyciek_pami%C4%99ci masz niemal identyczny przykład

0

No tak... teraz rozumiem. :) Dzięki.

Do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1