Owner = nil, a alokacja pamięci

Odpowiedz Nowy wątek
2011-07-21 19:37
squizee
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ć?

edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-07-21 20:03
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


Pół giga extra na dropboxie? Pół giga extra na dropboxie! Tyle wygrać! >>Klik here<<
edytowany 4x, ostatnio: unikalna_nazwa, 2011-07-21 20:12

Pozostało 580 znaków

2011-07-21 20:40
squizee
0

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

Do zamknięcia.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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