6

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

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

如果在堆栈上创建 TMyValue,这是一个问题,因为堆栈变量在创建时不会自动清零。

我以为我可以使用记录构造函数将记录归零,但记录构造函数不能是无参数的。大概这意味着当在堆栈上创建记录时,您不能强制记录构造函数自动执行。

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

4

1 回答 1

7

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

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

于 2013-06-04T09:22:15.980 回答