【发布时间】:2012-03-30 08:15:43
【问题描述】:
在 Delphi 2009 中,到目前为止,我在泛型方面没有遇到重大问题(使用 Generics.Collections 列表,没有特殊的泛型功能)。
现在我发现这段代码会在访问MyList.Count 的行中导致“无效指针操作”。 (MyList.Contains 和 MyList.IndexOf 导致相同的错误)。
如果我声明 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;
try
MyList.Add(Entry);
Assert(MyList.Count = 1); // <--- fails
finally
Entry.Free;
end;
finally
MyList.Free;
end;
end;
【问题讨论】:
-
您应该避免使用 Delphi 2009。该版本中存在大量泛型错误。
-
这可能是一个 D2009 错误。您的示例适用于 Delphi XE2,但添加后不应释放 Entry,因为 TObjectList 的默认行为是拥有对象。
-
想一想,这可能是问题所在。不是断言失败,而是“MyList.Free”行对吗?删除带有 Entry.Free 的行(或将 False 作为参数传递给列表构造函数),它应该可以工作。
-
你看过这个例子吗:Generics Collections TObjectList?
-
非常感谢 cmets!我发现问题是缺少免费。我的代码中的原始问题没有使用 Count 而是 Contains 并且我发布了一个不好的示例,抱歉。我开了一个新问题stackoverflow.com/questions/9940082/…
标签: delphi generics delphi-2009