アレイの長さをゼロに設定すると、アレイが破壊され、「アレイをロードしたままにしておきたい」という希望に反します。ただし、はになります。すべてのレコードとその文字列(その時点で参照カウントが1の文字列)のメモリが解放されます。
文字列のメモリを解放したいだけで、レコードメモリを割り当てたままにしたい場合は(すぐ後で別のレコードセットを割り当てようとしているため、そのレコードを解放して再割り当てする必要はありません。同じメモリ)、文字列のメンバーだけをクリアすることはできますが、それを行うライブラリ呼び出しはありません。代わりに、ループを作成して各レコードのフィールドを自分でクリアする必要があります。
for i := 0 to High(transactions) do begin
transactions[i].alias := '';
transactions[i].description := '';
end;
クリアする必要があるレコードのフィールドがたくさんある場合、配列の各要素にデフォルトTTransaction
値を代入する方が便利かもしれません。あなたはDefault
機能を使用することができ、またはデルファイの古いバージョンでは、あなたはすでに明確なすべてのフィールドを持っているTTransaction
宣言することができます。
const
ClearTransaction: TTransaction = (alias: ''; description: ''; creation: 0; count: 0);
for i := 0 to High(transactions) do
transactions[i] := ClearTransaction;
// or
transactions[i] := Default(TTransaction);
'Finalize'は実際に' a'の値を変更しますか?私は常に 'Free'または' Initialize'の呼び出しを予期して、 'a'に格納された動的配列の元のアドレスを残しながらメモリを解放するという印象の下にいました。 –
@Robダイナミックアレイの場合、これらの3つのオプションはすべて同等です。管理型の場合、Finalizeは参照をnilに設定する必要があります。それは選択肢がありません。動的配列型のローカル変数を考えてみましょう。 –
@DavidHeffernan配列の最高の境界が10の場合は、以下を使用する方が良いでしょう:1- Nilに設定し、すべてを再作成します。 2 - 使用されたインデックスを次の値に関連付けますか? – EProgrammerNotFound