1

たとえば、次のものがあるとします。

type
  TVArray = array of array of Variant;
var
  MyArray : TVArray;

次に、MyArray に一連の要素を追加して、それぞれ 30 のバリアントからなる配列を 1000 個持つようにします。

すぐに実行したい場合、そのメモリの割り当てを解除するための最良または好ましい方法は何ですか?

MyArray := nil;

また

SetLength(MyArray, 0);

また

Finalize(MyArray);

または、最初にサブ配列に何かする必要がありますか? 個々のバリアントに何が含まれているかは重要ですか?

4

2 に答える 2

8

3 つすべてが同等です。どちらを選ぶかはスタイルの問題です。nilとても簡潔なので、最初のもの ( を割り当てる) を好みます。

コンパイラは、値を解放する方法を知っていVariantます。配列を解放する前に行う必要があることは何もありません — とにかく配列を解放することを気にするなら、いずれにせよコンパイラーが配列を破棄することを考えると。

于 2012-05-18T16:03:13.517 に答える
4

バリアントはマネージド型です。これは、バリアントがスコープ外になると、コンパイラがそのバリ​​アントに関連付けられているすべてのリソースを破棄することを意味します。文字列、動的配列、インターフェイスなどを扱うのと同じように、バリアントの有効期間を扱います。

これは、3 つのバリアントはすべて意味が同じであり、配列とその内容を正しく破棄することを意味します。どちらを使用するかは、お好みで選択できます。

于 2012-05-18T16:05:49.160 に答える