我是Delphi的新手,我一直在运行一些测试来查看默认情况下初始化了哪些对象变量和堆栈变量:TInstanceVariables = class fBoolean: boolean; // always starts off as false fInteger: integer; // always starts off as zero fObject: TObject; // always starts off as nilend;这是我习惯使用其他语言的行为,但我想知道在Delphi中依赖它是否安全?例如,我想知道它是否可能依赖于编译器设置,或者可能在不同的机器上以不同的方式工作。依赖于对象的默认初始化值是正常的,还是在构造函数中显式设置所有实例变量?至于堆栈(过程级)变量,我的测试显示单位化布尔值为真,单位化整数为2129993264,未初始化对象只是无效指针(即不是nil)。我猜测规范是在访问它们之前始终设置过程级变量?
3 回答
四季花海
TA贡献1811条经验 获得超5个赞
是的,这是记录在案的行为:
对象字段始终初始化为0,0.0,'',False,nil或任何适用的值。
全局变量也始终初始化为0等;
本地引用计数*变量始终初始化为nil或'';
本地非引用计数*变量未初始化,因此您必须先分配一个值才能使用它们。
我记得Barry Kelly某个地方为“引用计数”写了一个定义,但是找不到它,所以这应该在此期间做:
reference-counting ==自行引用计数,或直接或间接包含引用计数的字段(用于记录)或元素(用于数组):
string, variant, interface
或包含此类型的动态数组或静态数组。
笔记:
record
本身不足以成为参考计数我还没有尝试使用泛型
富国沪深
TA贡献1790条经验 获得超9个赞
没有显式初始值设定项的全局变量在可执行文件的BSS部分中分配。它们实际上并没有占用EXE中的任何空间; BSS部分是OS分配并清除为零的特殊部分。在其他操作系统上,有类似的机制。
您可以依赖零初始化的全局变量。
白衣染霜花
TA贡献1796条经验 获得超10个赞
- 3 回答
- 0 关注
- 921 浏览
添加回答
举报
0/150
提交
取消