Показать сообщение отдельно
  #4  
Старый 23.08.2022, 01:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вообще, методы, объявленные в коде как constructor и destructor, таковыми на самом деле не являются. Правдя тут надо отметить, что доступа к реальным конструктору и деструктору в Дельфи просто нет (не считаем различные хаки). Поэтому данные методы и используются для реализации выделения памяти под атрибуты классов (имеется в виду сложные атрибуты, являющиеся так же объектами классов, память под простые типы выделяется именно реальным конструктором, но вызов его скрыт от программиста). Т.е. по сути constructor и destructor являются инициализатором и деинициализатором по своей сути. Это для начала.

Теперь по повду "излишней функциональности". Во первых, ее всегда можно скрыть:
Код:
type
  TMyObjectWithItems = class
  private
    FItems : TObjectList;
    function GetItem(Index : Integer) : TAnotherObject;
    function GetCount : Integer;
  ...
  public
    property Items[Index : Integer] : TAnotherObject read GetItem;
    property Count : Integer read GetCount;
  end;
...

function TMyObjectWithItems.GetItem(Index : Integer) : TAnotherObject;
begin
  Result := FItems[Index] As TAnotherObject;
end;

function TMyObjectWithItems.GetCount : Integer;
begin
  Result := FItems.Count;
end;

Таким образом ты прячешь "излишнюю функциональность", но можешь ею пользоваться, если надо.

Теперь ответы на последние 2 вопроса.
1. Да, надо. Для проверки, если используешь одну из последних версий Дельфи, можешь включить отчет об утечках памяти. При закрытии приложения тебе менеджер памяти скажет, если есть утечки.
2. Да, их тоже надо удалять в деструкторе. В принципе, при правльном дизайне, это по одной строчке в конструкторе и деструкторе (создать и, соответсвенно, удалить).
Ответить с цитированием