Различие методов: Extract и Remove у TObjectList

sgec
Дата: 30.11.2007 14:04:44
У TObjectList есть два метода: Extract и Remove. Remove удаляет объект, Extract нет. Смотрел исходники, чего то не могу уловить момент где именно он его удаляет.
sgec
Дата: 30.11.2007 14:52:27
Вопрос конечно не насущный, просто не люблю когда что-то недопонимаю.
Naf
Дата: 30.11.2007 15:02:53
Remove вызывает родительский (т.е. TList) Remove
тот вызывает Delete, который вызывает виртуальный Notify
А он уже у TObjectList переопределен (override):
if OwnsObjects then
    if Action = lnDeleted then
      TObject(Ptr).Free;
  inherited Notify(Ptr, Action);
sgec
Дата: 30.11.2007 15:05:09
О, спасибо большое!
sgec
Дата: 30.11.2007 15:13:46
Хы, тупо тыкал в метод естественно он меня перевел на метод TList. ))
Naf
Дата: 30.11.2007 15:27:25
sgec
Хы, тупо тыкал в метод естественно он меня перевел на метод TList. ))


нужно смотреть его декларацию, точнее в ней обращать внимание на
virtual
sgec
Дата: 30.11.2007 15:34:03
Ну да, еще раз спасибо. Заклинило, наверно пятница ))
Anatoly Podgoretsky
Дата: 30.11.2007 15:40:46
А тебе нужно разрушение?
sgec
Дата: 30.11.2007 15:49:41
Anatoly Podgoretsky
А тебе нужно разрушение?


Нужно ага. Я именно удаляю объект.
А вот скажите это нормальное решение?

Контейнер реализован через TObjectList. Объекты из контейнера могут быть сгруппированы с повторением. В каждой "группе" список реализован через TList. Чтобы удалить Объект удаляу ссылку из всех групп., затем удаляю объект из "основного" списка.

вот так вот:

procedure TVan.DelCargo(const AIndex: Integer);
var
  TempCargo: TCargo;
  I: Integer;
begin
  TempCargo := (FCargoList[AIndex] as TCargo);
  for I := 0 to FGroupCalcList.Count - 1 do
  begin
    //удаляет только из списка
    (FGroupCalcList[I] as TGroupCalc).CargoList.Remove(TempCargo);
  end;
  //Удаляет из списка и сам объект
  FCargoList.Remove(TempCargo);
end
sgec
Дата: 30.11.2007 15:54:03
а зачем интересно там:
inherited Notify(Ptr, Action);

он же пустой? так на будущее? ))