我正在将一些现有的Delphi代码重构为一个类。
当前代码使用定义为动态数组array of byte
的全局变量。在初始化时,代码计算出数组的大小,并使用SetLength
来分配它。它既可以作为获取数据的缓冲区,也可以作为后续处理的运行时容器。
我想将此变量作为对象属性之一移动。
但我不确定是否可以保持其类型。这被认为是好的做法吗?
我正在考虑的替代方法是将其转换为像TList这样的动态容器。我将保留用于获取数据的相同代码,使用本地动态数组,但在其余生中将其移动到容器中。值得努力吗?我知道优雅总是在最后得到回报,但我现在并没有真正看到努力的价值。有什么想法吗?
答案 0 :(得分:2)
是吗?是这样吗?请注意,更改工作代码始终包含破坏某些内容的风险。如果获得的优雅是值得冒险的话,必须在每种情况下决定恕我直言。我知道优雅总是会在最后得到回报,
在您的情况下,如果您在运行时添加和删除项目,我会使用TList
,因为这些操作更容易。如果您只是初始化一次长度并且数组在初始化后保持不变,则可以保留动态数组。绝对没有“好的做法”说你不应该使用动态数组。
答案 1 :(得分:2)
动态数组很棒,但实际上只适用于固定维度。如果它们必须增长,特别是在单个记录增量中,这可能会导致内存管理器的最终错误(以及可能的性能问题),因为必须重新分配阵列并将其复制到新的更大目标。 TList至少有一个“增长”机制,不常被称为。