Zachowanie przy zwalnianiu pamięci z komponentów/kontrolek

0

Witam.
Tak się zastanawiam czy jeżeli na kontrolce TFrame są komponenty to czy po zwolnieniu pamięci (TFrame.Free) giną też dane komponentów z kontrolki czy tkwią gdzieś w pamięci i trzeba je osobno zwalniać i czy podobnie jest gdy jako parametr Parent kontrolki TButton ustawimy TPanel to po zwolnieniu pamięci TPanel ginie TButton. I jeszcze pytanie czy jest rezerwowana pamięć dla zmiennych zadeklarowanych w procedure/function nawet gdy się ich nie użyło (procedur/funkcji)?

0

I jeszcze pytanie czy jest rezerwowana pamięć dla zmiennych zadeklarowanych w procedure/function nawet gdy się ich nie użyło (procedur/funkcji)?

Zależy co przez to rozumiesz.
Obiekty nie są tworzone, dopóki nie wywołasz ich konstruktora, a zmienne typu integer czy string mają swoje miejsce nawet, gdy ich nie używasz (chociaż nie wiem, czy optymalizator takich zmiennych automatycznie nie wywala z kodu w czasie kompilacji).

0

Tak się zastanawiam czy jeżeli na kontrolce TFrame są komponenty to czy po zwolnieniu pamięci (TFrame.Free) giną też dane komponentów z kontrolki czy tkwią gdzieś w pamięci i trzeba je osobno zwalniać i czy podobnie jest gdy jako parametr Parent kontrolki TButton ustawimy TPanel to po zwolnieniu pamięci TPanel ginie TButton

http://delphi.about.com/od/objectpascalide/a/owner_parent.htm

I jeszcze pytanie czy jest rezerwowana pamięć dla zmiennych zadeklarowanych w procedure/function nawet gdy się ich nie użyło (procedur/funkcji)?

Zazwyczaj nie, pamięć w ogóle może nie być dla nich przypisywana w przypadku optymalizacji. Zazwyczaj po prostu wszystko jest odkładane na stos czyli każde wywołanie procedury powoduje stworzenie wszystkich zmiennych na stosie.

Obiekty nie są tworzone, dopóki nie wywołasz ich konstruktora, a zmienne typu integer czy string mają swoje miejsce nawet, gdy ich nie używasz (chociaż nie wiem, czy optymalizator takich zmiennych automatycznie nie wywala z kodu w czasie kompilacji).

Obiekt to nie klasa. Obiektów konstruktora się nie wywołuje bo jest automatycznie wywoływany i zwalniany gdy nie ma do niego referencję. Klasa nie jest referencjowana i trzeba ręcznie wywołać konstruktor i destruktor.

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