2009-11-27 53 views
1

我正在將一些現有的Delphi代碼重構爲一個類。在對象字段中使用動態數組是否是一種很好的做法?

當前代碼使用定義爲動態數組的array of byte的全局變量。在初始化時,代碼會計算出陣列的大小,並使用SetLength來分配它。作爲獲取數據的緩衝區以及作爲稍後處理的運行時容器都很方便。

我想將此變量作爲對象屬性之一移動。

但我不確定是否可以保持它的類型。它被認爲是良好的做法?

我正在考慮的替代方案是將其轉換爲像TList這樣的動態容器。我將保留與獲取數據相同的代碼,使用本地動態數組,但將其移動到容器的剩餘壽命。這是值得的努力?我知道優雅總是在最後得到回報,但我現在看不到這一努力的價值。有什麼想法嗎?

回答

2

動態數組很好,但只能用於固定維數。如果它們必須增長,特別是以單個記錄增量增長,這可能會導致內存管理器發生最終錯誤(以及可能的性能問題),因爲陣列必須重新分配並複製到新的更大的目標。 TList至少有一個「不斷增長」的機制,被稱爲不太經常。

+0

謝謝,你的洞察力非常有價值。即使可以反對優雅,離開動態陣列,現在也有技術上的理由。謝謝。 –

+2

「這可能會導致內存管理器發生最終錯誤」您是否介意詳細說明?那是什麼意思? –

2

我知道,優雅總是在年底還清,

是這樣嗎?請注意,更改工作代碼始終包含破壞某些內容的風險。它必須在任何情況下決定恕我直言,如果獲得的優雅是值得的風險。

就你而言,如果你在運行時添加和刪除項目,我會使用TList,因爲這些操作更容易。如果你只是初始化長度一次,初始化後數組是恆定的,你可以保持動態數組。絕對沒有「好的做法」,說你不應該使用動態數組。

+0

我的第一個賭注是不要觸摸代碼。你的回答和Brian的幫助我做出最終決定,並將動態數組留在對象中。謝謝。 –

相關問題