Re[7]: Циклы с произвольным уровнем вложенности
От: kov_serg Россия  
Дата: 10.06.24 09:29
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Меня сейчас чуть смущает: в Delphi интерфейсы это же com, значит лишние сложности и тормоза?

Сложностей нет. Когда будет тормозить профилирование покажет где. Очень сомневаюсь что узким местом будет мехнанизм интерфейсов.
У IUnknown всего 3 метода QueryInterface _AddRef и _Release первый преобразует типы, и два метода увеличить кол-во ссылок и уменьшить на один. Как только кол-во ссылок равно 0 он вызывает деструктор и освобождает память. И delphi под капотом сама расставляет вызовы AddRef и Release.

Если пугают интерфейсы сделайте на абстрактном классе.
...
uses SysUtils;
...

type
  TStateGen=class
    function Next(var state:TState);virtual;abstract;
  end;

  TGenAll=class(TStateGen)
    function Next(var state:TState);override;
    ...

...
  gen:=mkGen(src);
  while gen.Next(item) do begin
    showState(item);
  end;
  FreeAndNil(gen);
...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.