我是Delphi的新手,我已经运行一些测试,看看默认情况下初始化对象变量和堆栈变量:
TInstanceVariables = class fBoolean: boolean; // always starts off as false fInteger: integer; // always starts off as zero fObject: TObject; // always starts off as nil end;
这是我习惯了从其他语言的行为,但我想知道是否可以安全地依赖它在Delphi?例如,我想知道它是否可能依赖于编译器设置,或者在不同的机器上工作不同。是否正常依赖于对象的默认初始化值,或者您是否在构造函数中显式设置所有实例变量?
对于堆栈(过程级)变量,我的测试显示单位化的布尔是真实的,单位化的整数是2129993264,未归化的对象只是无效的指针(即不是nil)。我猜测的标准是在访问它们之前总是设置过程级变量?
解决方法
是的,这是记录的行为:
>对象字段总是初始化为0,0.0,”,False,nil或任何适用。
>全局变量总是初始化为0等;
>本地引用计数*变量总是初始化为nil或”;
>本地非引用计数*变量未初始化,因此您必须先分配值,然后才能使用它们。
我记得Barry Kelly在某处写了一个“引用计数”的定义,但是找不到它,所以这应该在此期间:
reference-counted == that are reference-counted themselves,or
directly or indirectly contain fields (for records) or elements (for
arrays) that are reference-counted like:string,variant,interface
or dynamic array or static array containing such types.
笔记:
>记录本身不足以成为引用计数>我还没有试过这个与泛型