相关疑难解决方法(0)

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;
Run Code Online (Sandbox Code Playgroud)

这是我习惯使用其他语言的行为,但我想知道在Delphi中依赖它是否安全?例如,我想知道它是否可能依赖于编译器设置,或者可能在不同的机器上以不同的方式工作.依赖于对象的默认初始化值是正常的,还是在构造函数中显式设置所有实例变量?

至于堆栈(过程级)变量,我的测试显示单位化布尔值为真,单位化整数为2129993264,未初始化对象只是无效指针(即不是nil).我猜测规范是在访问它们之前始终设置过程级变量?

delphi variables initialization

101
推荐指数
9
解决办法
6万
查看次数

如果"Assigned()"无法做到,如何检测"悬空指针"?

在另一个问题中,我发现Assigned()函数是相同的Pointer <> nil.一直是我的理解Assigned()是检测到这些悬空指针,但现在我已经知道它没有.悬空指针可能是在某一点上创建的,但此后已被释放且尚未分配nil.

如果Assigned()无法检测到悬空指针,那又可以呢?在尝试使用它之前,我想检查我的对象以确保它确实是一个有效的创建对象.我没有使用FreeAndNil尽可能多的推荐,因为我喜欢直接.我只是用SomeObject.Free.

访问违规是我最大的敌人 - 我尽我所能阻止他们出现.

delphi validation pointers delphi-7

14
推荐指数
5
解决办法
3728
查看次数