如何确定通用列表T List <t>是否已初始化</t>

时间:2013-07-11 15:20:35

标签: delphi

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

2 个答案:

答案 0 :(得分:2)

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

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

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

但是作为局部变量的对象引用变量未初始化为nil。实际上它们根本没有初始化。同样,对于通过调用GetMem分配的对象引用变量。

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

答案 1 :(得分:1)

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

它与内存分配和数据初始化分开的ObjC classname.alloc.init不同,在Delphi中它都发生在classname.Create调用中。

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