Я только что заметил, что
var
ObjList : TObjectList <TMyObject>;
...
ObjList := TObjectList <TMyObject>.Create (True);
ObjList.Add (TMyObject.Create);
ObjList.Clear;
не освобождает объект. Глядя на исходный код, кажется, что уведомление cnRemoved
не запускается в Clear
(унаследовано от TList
).
Мой вопрос: Это намеренно? Есть ли причина, по которой никто не хочет получать эти уведомления в случае Clear
? Или это можно рассматривать как ошибку в классах коллекций?
EDIT
Оказывается, я поместил строку
inherited Create;
в верхнюю часть деструктора TMyObject
, который должен был войти в конструктор. Вот почему я получил сообщения об утечках памяти, которые выглядели так, как будто TObjectList
не освобождает элементы. И взгляд на источник убедил меня (я был в ловушке свойства Count
). В любом случае спасибо за вашу помощь!