2013-03-29 12 views
24

Czy uwolnienie listy rodzajowe jak TList<string>, TList<Double>, TList<Integer> lub TList<TMyRecord>, gdzie TMyRecord jest zadeklarowana następująco:Jak uwolnić typową TList <T>?

type 
    TMyRecord = record 
    MyString: string; 
    MyDouble: Double; 
    MyInteger: Integer; 
    end; 

wymaga żadnej dodatkowej pracy lub jest MyList.Free wystarczające?

+14

+1. Bardzo ładnie napisane pytanie. –

Odpowiedz

27

Streszczenie

MyList.Free jest wystarczająca.

Szczegółowa odpowiedź

TList<T> generic pojemnik posiada jego zawartość. Po zwolnieniu pojemnika zawartość jest również usuwana.

Teraz, jeśli T jest odniesieniem niezarządzanym - wskaźnikiem lub klasą, to lista jest właścicielem odwołania. Nie jest właścicielem tego, do czego odnosi się odwołanie. Więc jeśli masz TList<TObject>, dodaj niektóre obiekty, a następnie zwolnij listę, odniesienia są usuwane, ale obiekty pozostają. Tak więc, aby sobie z tym poradzić, jest TObjectList<T>. Ten kontener można skonfigurować tak, aby był właścicielem zarówno obiektów, jak i odniesień, a zatem pozbywał się obiektów w odpowiednim momencie.

Teraz, w twoim scenariuszu, każda twoja lista zawiera albo typ wartości, albo typ zarządzany. Lista posiada te obiekty i usuwa je, gdy zostaną zniszczone. Tak więc dla wszystkich twoich list jest wszystko, co jest potrzebne.

Powiązane problemy