Właśnie zauważyłem, żeDlaczego TObjectList <T>. Czy usunąć wolne obiekty?
var
ObjList : TObjectList <TMyObject>;
...
ObjList := TObjectList <TMyObject>.Create (True);
ObjList.Add (TMyObject.Create);
ObjList.Clear;
nie zwalnia obiekt. Patrząc na kod źródłowy wydaje się, że powiadomienie cnRemoved
nie jest wywoływane w Clear
(odziedziczone po TList <T>
).
Moje pytanie: Czy jest to zamierzone? Czy jest jakiś powód, dla którego nie chcesz otrzymywać tych powiadomień w przypadku Clear
? Czy może to być uznane za błąd w klasach kolekcji?
EDIT
Okazuje się, że mogę umieścić linię
inherited Create;
na szczycie TMyObject
destructor, który miał udać się do konstruktora. Dlatego mam zgłoszone wycieki pamięci, które wyglądały tak, jakby TObjectList
nie zwalniało elementów. I spojrzenie na źródło przekonało mnie (zostałem uwięziony przez właściwość Count
). Mimo wszystko, dziękuję za twoją pomoc!
Dziki przypuszczenie: Czy oznaczono 'TMyObject.Destroy' jako' override'? –
Jak mierzysz, że obiekt nie zostanie uwolniony? –