微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

默认情况下,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.

笔记:

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

原文地址:https://www.jb51.cc/delphi/103877.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐