gpt4 book ai didi

delphi - TObjectList.Count 导致无效的指针操作

转载 作者:行者123 更新时间:2023-12-03 18:38:15 34 4
gpt4 key购买 nike

在 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;

最佳答案

TObjectList命名对象列表,因为它拥有它存储的对象。所以你不必释放列表包含你自己的对象。 TObjectList为你做。
我已经在 Delphi2010 中测试了你的示例代码。我在 MyList.free() 中获得了 AV线。原因是你做Entry.Free . List 对此一无所知,并试图 free再次反对。TObjectList s 构造函数具有 bool 参数 ownsObjects (默认 = true),您可以使用它并释放对象,它包含手动。

关于delphi - TObjectList<T>.Count 导致无效的指针操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9939277/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com