Zwalnianie pamieci

0

Czy musze zwolnic (M.Free) ?, jesli nie zwolnie bedzie to blad, przeciez wszystko dziala...
var
M : TMemo;
begin
M := TMemo.Create(Self);
with M do
begin
Parent := Panel3;
Color := cl3DLight;
Width := 565;
Height := 233;
Font.Name := 'Courier New';
ReadOnly := True;
BorderStyle := bsSingle;
Show;
//M.Free; ?????????????????
end;

0

Jak chcesz to zwolnij, jak nie to nie. :)

0

W tym momencie zwalnianie jest bez sensu, bo wychodzi na to, że tworzysz komponent tylko po to, żeby go zniszczyć :/

Jak tworzysz komponent, którego chcesz używać, to zwalniaj go w momencie zamykania programu.

A czy się powinno zwalniać to co się stworzyło? Powinno.

0

A czy podczas zamykania programu komponenty nie niszczą się same razem z aplikacją ? :-/

0

No wlasnie podczas zamykania programu nie niszcza sie same, to po co w ogóle zwalniac...

0

Lepiej zwolnić ręcznie komponenty tworzone dynamicznie. System i jego mechanizmy garbage collection mają czasami różne kłopoty z posprzątaniem śmieci po naszej aplikacji. Zwłaszcza pod Windows 9x/ME. NT już sobie z tym radzi o niebo lepiej.

Spotkałeś się kiedyś z programem, który po zamknięciu nadal zajmował pamięć? To właśnie skutki niedbalstwa programistów i niezwalniania pamięci. Potem w pamięci się walają resztki DLLi, jakiegoś kodu itp. A ma narzekamy na niestabilność systemu...

Ale to tak OT :)

// ŻE CO? po zamknięciu programu system od razu zwalnia jego wszystkie nie współdzielone zasoby, niezależnie od tego, czy jest to system 9x, czy NT (tylko dllki są wyładowywane z opóźnieniem). poza tym system nie ma czegoś takiego jak garbage collector - Ł

0

Dobrze wiedzieć :)

0

Jakie śmieci ? - o czym Wy mówicie?

M := TMemo.Create(Self);

Od tej chwili właścicielem Memo (M) będzie ten obiekt, który jest pod wskaźnikiem Self ... - (zapewne forma Twojej aplikacji). Jeśli ona zostanie zwolniona to automatycznie zwolnią się wszystkie jej obiekty. Więc nie ma tu mowy o żadnych smieciach.

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