保证堆栈记录的初始化

Ian*_*dby 6 delphi delphi-xe2

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

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

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

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

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

LU *_* RD 7

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

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