我是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中依靠它是否安全?例如,我想知道它是否取决于编译器设置,或者在不同机器上的工作方式是否不同。依靠对象的默认初始化值是正常的,还是在构造函数中显式设置所有实例变量?

至于堆栈(过程级别)变量,我的测试表明,统一化的 bool(boolean) 值是真实的,统一化的整数是2129993264,未初始化的对象只是无效的指针(即不是nil)。我猜测规范是总是在访问它们之前设置过程级变量?

最佳答案

是的,这是记录的行为:

  • 对象字段始终初始化为0、0.0,'',False,nil或任何适用的字段。
  • 全局变量也总是初始化为0等。
  • 本地引用计数*变量始终初始化为nil或'';
  • 本地非引用计数*变量未初始化,因此必须先分配一个值,然后才能使用它们。

  • 我记得Barry Kelly在某处写了一个“引用计数”的定义,但是再也找不到了,因此在此期间应该这样做:



    笔记:
  • record本身不足以成为引用计数的
  • 我还没有使用泛型尝试过此操作
  • 关于delphi - 默认情况下,delphi变量是否使用值初始化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/132725/

    10-11 22:57
    查看更多