Показать сообщение отдельно
  #3  
Старый 22.08.2022, 08:32
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию

Попробую не плодить тем, спрошу здесь
Цитата:
Сообщение от lmikle
лучше использовать TObjectList.
Тщательно рассмотрел данный вариант, все-таки излишняя функциональность, та же история и с TCollection. Буду делать свое "с нуля".
А вопрос возник следующий: как именно следует уничтожать объекты?
Нашел вот это
Код:
unit System;
...

destructor TObject.Destroy;
begin
end;

procedure TObject.Free;
begin
// under ARC, this method isn't actually called since the compiler translates
// the call to be a mere nil assignment to the instance variable, which then calls _InstClear
  if Self <> nil then
    Destroy;
end;
ну т.е. деструктор вроде как ничего не делает, а фри только проверяет нужно-ли ничего не делать или можно ничего не делать.
В одном месте прочитал туманное объяснение что TObject - прародитель всех объектов и поэтому его деструктор вызывается как-то хитро и он все-таки что-то делает, но подробностей я так и не понял. И в комменте написано: "в ARC этот метод фактически не вызывается, поскольку компилятор преобразует вызов в простое присваивание переменной экземпляра nil, которое затем вызывает _Its Clear"
Ну т.е. это и все, можно со спокойным сердцем считать что память из-под объекта освободилась?
И еще:
Код:
  TPartForProduct = class(TObject)
  private
    FIndx: Word;
    FCheckID: string;
    FCount: Byte;
  public
    property Indx: Word read FIndx write FIndx;
    property CheckID: string read FCheckID write FCheckID;
    property Count: Byte read FCount write FCount;
  end;

  TPartList = array of TPartForProduct;

  TProduct = class(TObject)
  private
    FName: string;
    FAlias: string;
    FPartList: TPartList;
    function GetPartListCount: Byte;
    procedure SetPartListCount(const Value: Byte);
  public
    function IncPartSet:TPartForProduct;
    property Name: string read FName write FName;
    property Alias: string read FAlias write FAlias;
    property PartList: TPartList read FPartList write FPartList;
    property PartListCount: Byte read GetPartListCount write SetPartListCount;
  end;
1- В TProduct.Destroy ведь нужно пройтись по массиву и так же вызвать TPartForProduct.Free?
2-На данный момент в объектах только строки и числа, а как быть со всякими StringList или JPEGImage? Их тоже удалять в ручную?
Ответить с цитированием