保证堆栈记录的初始化

时间:2013-06-04 08:46:05

标签: delphi delphi-xe2

我想在已经使用多年的记录TMyValue中修复设计缺陷,我迫切希望在记录本身修复它 - 以避免更改公共接口 - 并且不需要使用记录的代码改变了。

基本上,缺陷是TMyValue在创建时必须初始化为零,否则在其上调用Clear方法可能会导致崩溃。这是因为如果指针是非零的,它包含一个指向动态分配内存的指针的字段,而Clear则会释放动态内存。

如果在堆栈上创建TMyValue,则会出现问题,因为堆栈变量在创建时不会自动归零。

我以为我可以使用记录构造函数将记录清零,但记录构造函数不能无参数。据推测,这意味着当在堆栈上创建记录时,您无法强制执行记录构造函数。

我怀疑我的问题的答案是“它无法完成”。请证明我错了!

1 个答案:

答案 0 :(得分:7)

将虚拟字符串成员添加到记录中。 由于字符串是托管类型,因此当记录进入范围时,它将被初始化为空字符串。

因此,在调用Clear方法时,首先测试虚拟字符串是否为空。 将字符串设置为适合于使用逻辑的值,以将记录标记为已初始化。