在对象字段中使用动态数组是一种好习惯吗?

时间:2009-11-27 15:25:12

标签: delphi oop

我正在将一些现有的Delphi代码重构为一个类。

当前代码使用定义为动态数组array of byte的全局变量。在初始化时,代码计算出数组的大小,并使用SetLength来分配它。它既可以作为获取数据的缓冲区,也可以作为后续处理的运行时容器。

我想将此变量作为对象属性之一移动。

但我不确定是否可以保持其类型。这被认为是好的做法吗?

我正在考虑的替代方法是将其转换为像TList这样的动态容器。我将保留用于获取数据的相同代码,使用本地动态数组,但在其余生中将其移动到容器中。值得努力吗?我知道优雅总是在最后得到回报,但我现在并没有真正看到努力的价值。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

  

我知道优雅总是会在最后得到回报,

是吗?是这样吗?请注意,更改工作代码始终包含破坏某些内容的风险。如果获得的优雅是值得冒险的话,必须在每种情况下决定恕我直言。

在您的情况下,如果您在运行时添加和删除项目,我会使用TList,因为这些操作更容易。如果您只是初始化一次长度并且数组在初始化后保持不变,则可以保留动态数组。绝对没有“好的做法”说你不应该使用动态数组。

答案 1 :(得分:2)

动态数组很棒,但实际上只适用于固定维度。如果它们必须增长,特别是在单个记录增量中,这可能会导致内存管理器的最终错误(以及可能的性能问题),因为必须重新分配阵列并将其复制到新的更大目标。 TList至少有一个“增长”机制,不常被称为。