TObjectList <T>. Содержит причины нарушения прав доступа в Delphi 2009 - PullRequest
2 голосов
/ 30 марта 2012

В Delphi 2009 у меня до сих пор не было серьезных проблем с Generics (с использованием списков Generics.Collections, без специальных функций Generics).

Теперь я обнаружил, что этот код вызовет AV в строке, которая обращается кMyList.Contains.

Ошибка исчезнет, ​​если я объявлю TMyList = class(TList<TMyEntry>);

Должен ли я избегать TObjectList<T> или что-то еще в моем коде вызывает эту ошибку?

type
  TMyEntry = class(TStringlist);
  TMyList = class(TObjectList<TMyEntry>);

procedure TListTests.TestAV;
var
  Entry: TMyEntry;
  MyList: TMyList;
begin
  MyList := TMyList.Create;
  try
    Entry := TMyEntry.Create;

    MyList.Add(Entry);

    Assert(MyList.Contains(Entry));  // <--- AV

  finally
    MyList.Free;
  end;
end;

1 Ответ

5 голосов
/ 30 марта 2012

Это исправление, основанное на связанном ответе :

, изменения

MyList := TMyList.Create;

на

MyList := TMyList.Create(TComparer<TMyEntry>.Default);
...