Zwalnianie Resulta?

0

Załóżmy, że mam taką funkcję :

function Funkcja(linie : TStrings) : TStringList;
begin
    Result := TStringList.Create;  //bez tego oczywiście błąd
    //tu jest coś robione z tymi Stringsami
end;

I teraz pytanie : Czy po wykonaniu tej funkcji Result jest zwalniany sam, czy trzeba jakoś to zrobić? Jeśli trzeba zrobić samemu, to jak?

0

Nie jest zwalniany.

Jeśli trzeba zrobić samemu, to jak?

Jak wywołujesz funkcję, to do czegoś przypisujesz jej wartość, nie?

więc

CosTam:=Funkcja(linie);
{cos robisz}
CosTam.Free;
 

Ale proponuję stworzyć listę poza funkcją, przekazać jako parametr i zwolnić poza funkcją.

CosTam:=TStringListCreate;
{cos robisz}
Funkcja(linia, CosTam); //funkcja będzie tu raczej procedurą
CosTam.Free;

Nic nie tracisz (Result to też parametr, tyle, że niejawny), a masz porządek. Jak będziesz tworzył i zwalniał na innym poziomie zagnieżdżenia to na pewno coś się pomylisz (nie teraz, to później) i będziesz miał wiolacje albo przecieki.

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