据我所知,当我们想要检查对象是否已初始化时,我们可以使用isassigned,但是现在我发现它对通用列表TList不起作用。 isassigned一直返回true,但这是错误的。那么解决方案是什么?
答案 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
调用中。
因此,只要您从构造函数接收到对象地址 - 对象就会被分配并初始化。