默认情况下,delphi变量是否使用值初始化?

前端之家收集整理的这篇文章主要介绍了默认情况下,delphi变量是否使用值初始化?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是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.

笔记:

>记录本身不足以成为引用计数>我还没有试过这个与泛型

猜你在找的Delphi相关文章