1

正如我所知,当我们想要检查一个对象是否已初始化时,我们可以使用 isassigned,但现在我发现它不适用于通用列表 TList。isassigned 一直返回 true 但这是错误的。那么解决方案是什么?

4

2 回答 2

2

类型的对象引用变量TList<T>与任何其他对象引用没有什么不同。您可以Assigned像使用任何其他对象引用变量一样使用它。

请注意,Assigned只能测试已初始化为的对象引用变量的初始化nil

例如,类实例成员nil在实例的构造函数开始执行之前被初始化。通过调用分配的对象引用New被初始化为nil。或者那些设置为默认值并分配给Default().

但是作为局部变量的对象引用变量未初始化为nil. 事实上,它们根本没有被初始化。对于通过调用分配的对象引用变量也是如此GetMem

底线是对象引用类型变量TList<T>或任何其他泛型类的处理与任何其他TObject后代的处理相同。

于 2013-07-11T15:35:27.787 回答
1

在 Delphi 中,当您创建一个对象时,它被初始化为构造序列的一部分。

它不像 ObjC 那样classname.alloc.init内存分配和数据初始化是分开的,在 Delphi 中这一切都发生在classname.Create调用中。

因此,只要您从构造函数接收到对象地址 - 对象就被分配和初始化。

于 2013-07-11T15:43:33.747 回答