2017-09-14 63 views
5

pisałem kodCzy TList <TPair <UInt32, UInt32 >> musi być bezpłatny?

procedure Pair; 
var 
    PairList: TList<TPair<UInt32, UInt32>>; 
    LPair: TPair<UInt32, UInt32>; 
begin 
    PairList := TList<TPair<UInt32, UInt32>>.Create; 
    try 
    PairList.Add(LPair.Create(4,10)); 
    finally 
    PairList.Free; 
    end; 
end; 

Kiedy uwolnić PairList, para, że ​​utworzono potrzebę być zwolniona zbyt?

+3

'LPair.Create (4,10)' urgh, konstruktor na instancji typu wartości. Embarcadero próbuje sprawić, żebyś cierpiał. FWIW, ten typ pary nie jest tutaj odpowiedni. Jest przeznaczony dla słownika. Nie używaj tylko typu, który ma odpowiednią liczbę członków, ignorując fakt, że ich nazwy nie są odpowiednie. –

+0

Czy mógłbyś zaproponować mi, chcę dwie wartości, które umieścić w TList –

+3

Zadeklarować typ rekordu. –

Odpowiedz

9

Nie trzeba uwolnić TPair zmienne, ponieważ jest to typ wartości - rekord zadeklarowane jako

TPair<TKey,TValue> = record 
    Key: TKey; 
    Value: TValue; 
    constructor Create(const AKey: TKey; const AValue: TValue); 
    end; 

Jeśli spróbujesz zwalniając go z LPair.Free byś się błąd kompilatora

E2003 Nieopisany identyfikator: "Bezpłatne"