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